JAVASE集合超完整讲义
《Java教学课件从零开始学JavaSE》
逻辑运算符
用于操作逻辑值,进行与、或、非等逻辑运 算。
关系运算符
用于比较两个值之间的关系,如大于、小于、 等于等。
位运算符
提供对整数进行二进制位操作的功能。
控制结构
1
顺序结构
解释代码按顺序执行的结构,以及如
条件结构
2
何正确使用分号和括号。
列表与集合
对比列表和集合的使用场景和 优缺点,帮助您选择适合的数 据结构。
方法和函数
方法定义
指导您如何创建和调用方 法,以及如何传递参数和 返回值。
递归函数
讲解递归函数的原理和用 途,并分享编写高效递归 函数的技巧。
Java内置函数
介绍常用的Java内置函数 和标准库,如Math类和 St r i n g 类的方法。
JavaSE的概述
1 全面而深入
2 实践驱动
涵盖JavaSE的方方面面,从 基础概念到高级技术,帮您 逐步建立深入的理解。
3 互动学习
通过丰富的实例和案例,让 您学以致用,真正掌握 JavaSE的核心概念和开发技 巧。
通过小测验和练习,巩固所学知识并提升编码技巧,快速成长为 JavaSE专家。
JavaSE开发环境的搭建
面向对象编程基础
面向对象原理
封装与抽象
继承与多态
解释面向对象编程的基本原理 和概念,如封装、继承和多态。
详细说明如何封装数据和行为, 以及如何使用抽象类和接口实 现抽象。
讲解继承和多态的概念和用法, 以及如何创建和使用子类和父 类的对象。
类和对象
面向对象思维
培养面向对象的思维方式, 学会将实际问题映射为类和 对象的关系。
Java2SE基础知识讲解PPT(81张)
第一个Java Application应用程序
• 打开记事本,新建一个文本文件,将文件名改为 Hello.java,在文件中键入如下内容并保存:
public class Hello {
范围及作用域; • 关键字static允许在不创建类的实例的情况下,调用
main函数; • 关键字void用来说明main函数是没有返回值的; • args是字符串数组,用来从命令行接收参数; • main函数的一般形式如下:
public static void main(String[] args)
,Tomcat,Eclipse+MyEclipse.
• Java企业级应用开发:Struts,Hibernate,XML,J2EE/EJB,UML,Spring,AJAX
4
Java 语言的发展历史
Java 已经成为当今最为流行的软件开发语言技术之 一。
5
Java的平台无关性
• Java是一种既面向对象又可以跨平台的语言,即:编写一次,随处运 行(Write once, Run anywhere);
使用javac编译器编译源文件; • javac命令的格式是:javac 完整的源文件名
切换到源文件所在的目录
使用javac命令编译源文件
光标闪烁表示语法无误, 顺利通过编译
.class(字节码)文件
• 顺利通过编译后将生成一个扩展名为.class的 字节码文件(类描述文件)。
扩展名为.java 的源文件
{
……
}
分析程序
• String[]是字符串类型的数组; • 在Java中,类名称一般首字母大写; • 使用System.out.println()将信息输出到
se集合
集合(就是装东西的容器):分为两类|——Collection|——MapCollection接口方法摘要:(抽象方法,实现类都有(ArrayList,LinkedList,HashSet,TreeSet))注意方法的参数类型和返回值!!!List集合——线性表数据结构(有序,可重复)|——ArrayList——底层是动态数组:更适合读取和存储数据ArrayList会初始化一个数组,当要存放的元素数量大于数组时,ArrayList会自动扩容数组度。
ArrayList 返回的字符串格式为:[元素1.toString(),元素2.toString(),....]会顺序调用集合中每个元素的toString方法,并拼接在一起。
|——LinkedList——底层是链表:更适合插入和删除元素接下来用ArrayList演示List的常用方法:接下来看看contains(有用到equals方法)方法:remove方法也是如此,需要用集合中元素自己的equals方法比较,有这个元素就删除掉。
所以要想得到我们想要的结果,一定要注意重写元素自己的equals方法!!!!还有下面的removeAll,retainAll方法也是这样!!!集合中储存的元素不是基本数据类型,字符串的时候,集合不知道该如何去比较元素的大小,当我们需要用到比较集合中的元素时,我们需要重写equals方法List接口中定义的独有方法(因为List有下标,所以有这些方法)Object get(int index)获取给定索引出的元素Object set(int index,Object obj)将给定的元素存入集合指定位置set方法的返回值为被替换的元素set方法指定的索引位置不能大于数组的元素数量,否则会出现下标越界异常add(int index,Object obj)向集合指定位置插入元素(原来的元素向后移)remove(int index)删除指定位置的元素其他方法:List<E> subList(int fromIndex,int toIndex)获取子ListList的排序:List是有下标的,可以对存放的元素进行排序,但因为存放的东西各种各样,还有自定义的对象,所以集合本身并不知道按照怎样的规则来排序,JDK中为我们定义了Comparable(意思是:可比较的)接口(此接口强行对实现它的每个类的对象进行整体排序),我们只要实现这个接口的compareTo(T o)方法(中文意思是和参数o比较),便可以拟定我们自己的大小规则,从而实现排序的目的!返回的值大于0,则表示当前对象大于参数对象小于小于等于等于注意,compareTo方法的调用是这个样子的:当前对象.compareTo(参数对象)使用范例:我定义了一个类Point,并且定义一个List集合来装Point对象,现在我要对这个集合进行排序,按照“从小到大”排序步骤是:1、Point类要实现Comparable接口,并重写接口里的抽象方法compareTo,同时重写equals方法2、调用Collections.sort(List<T> list)方法对List进行排序如下图代码:1、Point类的设置:2、main方法:注意!!!Collection是所有List集合和Set集合的顶级父类接口,而Collections是工具类,要想使用Collections.sort进行集合排序(只能对List排序),该集合中的元素必须有指定比较器,例如上面Point类中重写的compareTo就是个比较器。
JavaSE集合的图书管理系统功能说明
Java SE集合的图书管理系统功能说明图书管理系统一、需求说明1、功能:登录,注册,忘记密码,管理员管理,图书管理。
2、管理员管理:管理员的增删改查。
3、图书管理:图书的增删改查。
4、管理员属性包括:id,姓名,性别,年龄,家庭住址,手机号码,登录名称,登录密码,状态。
5、图书属性包括:id,图书名称,作者,单价,出版社,出版日期,类别。
6、技术:通过用集合来模拟数据库实现该系统,建议采用List集合实现,集合模拟数据库只是一个数据的临时保存。
二、功能说明1、注册功能描述:注册需要用户输入所有的必须的用户信息。
Id:用户输入,但是不能有相同,而且只能是数字姓名:不能为空。
性别:必填,只能是男或女。
年龄:必填,只能是数字而且限制在1-100。
手机号码:必填,必须都是数字而且是11位。
登录名称:必填,有字母、数字、特殊字符组成,不能以数字开头,长度在3-8位,而且不能有重复的登录名称。
登录密码:不能与登陆名称相同,而且必须是6-12位。
状态:用户只有三种状态,1表示正常2表示禁用3表示离职,默认情况下用户状态为1。
2、登陆功能登陆时必须输入登录名称和密码、验证码,当用户名和密码,验证码都正确时而且用户状态为1则登录成功,否则进行相关信息的提示。
3、忘记密码根据用id去查找密码,并提示用户修改密码,如果用户选择修改则进行密码修改否则退出该功能。
修改密码要求:不能与旧密码相同,而且要符合不能与登陆名称相同,而且必须是6-12位。
4、管理员管理(1)前提条件:只有登录成功才可以进行对管理员的操作。
(2)功能分为:增加、删除、修改、查询管理员。
①增加:参考管理员的注册功能。
②删除:根据管理员的ID进行删除,删除时需要判断id编号是否存在,存在则删除并提示用户删除结果,否则则提示用户id编号不存在,重新输入。
③修改:先根据用户id编号查询用户信息,然后再进行修改,修改时同样需要对输入的信息进行判断,修改成功则覆盖原先用户数据。
JavaSE_16_集合类(三)
受限制的泛型
• <? super T>T类型或其父类类型,在定义 Comparator实现类时可以指定Person类型, 并将其传入TreeSet. • 这样可以向Set中存储使用同样比较规则的 Person的子类Student,Teacher对象, • TreeSet(Comparator<? super E> comparator)
• Map.Entry是Map中内部定义的一个static 接口,专门用来保存keyvalue的内容。 • Map与Map.Entry
Map.Entry Map.Entry Map.Entry key key value value 增加元素 Map.Entry key value
11
• 对于Map接口来说,其本身是不能直接使用迭代 进行输出的,因为Map中的每一个位置存放的是 一对值(keyvalue),而Iterator中每次只能 找到一个值。所以如果非要使用迭代进行输出的 话,要按照以下操作步骤完成:
• 实现Map接口的集合类用来存储"键-值"映射对。 • JDK API中Map接口的实现类常用的有
– HashMap – TreeMap – Hashtable
(不常用)
• Map实现类中存储的"键-值"映射对是通过键来唯 一标识,Map底层的"键"是用Set来存放的。 • 所以存入HashMap中的映射对的"键"如果是自定 义的类,应该重写hashCode()和equals()方法。
受限制的泛型
• ArrayList<Map> list = new ArrayList<HashMap>();//error • MyGenerics<? extends Map> g1; • g1 = new MyGenerics<HashMap>();//ok • g1 = new MyGenerics<Hashtable>();//ok • g1 = new MyGenerics<LinkedHashMap>();//ok
Java SE进阶-05-集合
Java SE进阶-05-集合1.纲要a)主要集合概述b)Collection 和Iteratorc)Listd)Sete)Mapf)Collections 工具类g)Comparable 与Comparator集合继承结构图_Collection 部分集合继承结构图_Map 部分TreeMapPropertiesHashtableHashMap<<Interface>>SortedMap<<Interface>>Map灰色部分已经不建议使用CollectionsPropertiesStack<<Interface>>EnumerationHashtableTreeSet HashMapHashSetVectorLinkedListArrayList<<Interface>>SortedSet<<Interface>>Set<<Interface>>List<<Interface>>ListIteratorTreeMap<<Interface>>SortedMap<<Interface>>Map<<Interface>>Collection<<Interface>>IteratorHashMap的key部分的元素无序不可重复。
key部分就是一个HashSet,底层采用哈希表数据结构。
特点:存储元素的方式成对儿存储,以Key和Value的方式存储。
key部分的元素“无序不可重复”。
所以key部分等同可以看做Set集合。
Map中key起决定性作用。
key部分特点:无序不可重复,但是存储的元素可以按照元素大小顺序自动排列。
Hashtable是线程安全的,效率低,用的比较少。
JavaSE——集合框架
凯哥学堂班级:19班姓名:星空日期:2018年8月25日课程:javaSE (集合框架)集合框架:大数值计算:就好比小学的时候学习的加法运算,个位跟个位对其,十位跟十位相加,百位跟百位相加,相加时逢10进1。
首先用两个集合,把组数组放入集合中,先压进去的是高位,所以高位在最下面的位置,低位最后压进去再最高(最先出站进行运算),只要满足10就进位,每出站一次运算一次。
步骤:先申请2个字符串,把要计算的数值存放到字符串中,然后申请两个数组,将字符串的转换成数组,拆分进行存储。
接着申请2个集合,把数组里面的数值用循环添加到集合之中(进站),这样一来高位就在下面,个位就在上面。
我们先问一下2个集合那个大?按照最大的集合循环,申请一个int 进位存储。
最后是取值,在循环中申请2个变量,开始出站操作,每出一个转换成Integer类型,写上异常处理,如果没有值可以取出就报异常错误(分开写的用处,2个集合长度不一样)。
开始计算,计算结果大于等于10整除10,就是逢10 进1,不大于10不追加。
最后字符串颠倒输出出去。
集合工具类:排序:按照ASCII进行排序。
混排:每次打印的结果都不一样。
颠倒:搜索:搜索出来告诉下标数。
拷贝:覆盖,集合进行覆盖前面的集合。
最大值最小值:泛型:不说明泛型就是Object类型。
就是用来说明类型。
在集合中非常多,用于控制集合存储类型,作用是:说明存放的是什么类型。
<T>可以写多个<extends String>这里说明类型只能是String或者String子类。
也可以在方法上声明泛型。
泛型是程序设计语言的一种特性。
允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。
各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。
将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。
泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
JAVASE基础知识-图文
JAVASE基础知识-图文1、课程名称:JAVASE基础知识2、知识点2.1、上次课程的主要知识点1、在Oracle的学习之中有以下几点必须重点掌握:·数据的查询和更新操作、事务处理;·表的建立、约束的使用、序列的使用;·表的设计范式应该是理解。
2.2、本次预计讲解的知识点1、JAVA学习层次;2、Java简介及JDK的安装及配置;3、JavaSE的基础程序设计;4、数组及方法的使用。
3、具体内容3.1、Java的学习层次从程序的开发来讲,Java语言是整个JAVAEE体系的核心基础部分,在这一部分之中,只有将核心概念掌握透彻了,知识点的学习:可以根据每一个关键字或者是知识点,联想到其所对应的程序及其概念,以及各个注意事项。
在整个JAVA基础部分之中,有以下三个主要部分组成:·JAVASE的基础部分:基本程序的一个恢复以及数组及方法的使用;·JavaSE的面向对象:此部分概念很多,而且必须全部记下;·JavaSE的应用部分:类集、IO、类库、JDBC等等。
才有可能为以后的学习提供方便。
其他的有许多的了解部分:多线程、网络编程;理解的部分:JavaSE1.5的提供的各种新特性。
在以上的所有知识之中按照重要性来讲,一共有如下几部分:·面向对象:所讲解的一切都是为了抽象类和接口服务的;·类集部分:为数据结构实现;·IO:面向对象的完美体现;·JDBC:为以后的JAVAEE开发做准备呢。
3.2、Java简介(理解)Java:是一门编程语言,而且现在已经形成了一自己的一套完整的开发体系,被大多数的公司所支持,所以现在的Java从整个行业发展来讲,Java平台、.NET平台、AdobeFLE某等已经算是将编程霸占的已经足够多了,因为这些公司·.NET:微软支持;·FLE某:Adobe公司支持;·Java:Oracle/SUN支持、IBM、HP等公司支持。
JavaSE基础知识大全超完整版67页
注:1)以上变量均配置在系统变量中;
2)设置变量值时,注意变量值末尾有没有;号,如果没有,先添加;号再输入上
面的代码。
以Win7为例,介绍环境变量的配置:
STEP01:【计算机】右键→选择【属性】,打开【系统】页面,→点击【高级系统设置】→点击【环境变量】,进行系统变量的设置
STEP02:配置JAVA_HOME属性。
点击上图中的‘系统变量’下的新建,找到安装java SDK的目录,将JAVA_HOME指向java SDK的目录。
STEP03:配置CLASSPATH变量
和配置JAVA_HOME类似,在“系统变量”点击“新建”,变量名:”CLASSPATH”,变量值: ”.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”。%JAVA_HOME%就是引用之前配置好的JAVA_HOME。
下输入java -version
返回JDK的安装版本,即表示JDK安装配置成功。
eclipse
一、下载
下载eclipse压缩包
二、安装
STEP01
STEP02
解压完毕后即可使用,进入文件夹,点击eclipse.exe启动eclipse;
STEP03
第一次打开要设置工作环境,位置可自己指定;
STEP04
注:常量名称一般都采用大写。如果名称中含有多个单词,单词之间以“_”分隔。常量在定义时就要初始化赋值。
变量:
A变量必须声明,并且初始化以后使用;
B变量必须有明确的类型;
C变量不能重复定义。
Java SE课件:12
MyTimer(){ this.setLayout(null); this.setBounds(200, 200, 300, 100); t=new Label(); t.setBounds(50, 50, 100, 30);
}
}
import java.awt.*; import java.awt.event.*;
类的子类的对象
Public class Test{ public void static main(String[] args){ MyThread mt=new MyThread(); }
} class MyThread extends Thread{
}
线程
2.运行:
一个Thread类的子类需要重写run()方法,而run() 方法中的内容, 就是线程运行时执行的程序。执行线程的start方法,则线程开始运行。
Label t; int k=1200; Timer timer; MyTimer(){
this.setLayout(null); this.setBounds(200, 200, 300, 100);
}
}
import java.awt.*; import java.awt.event.*;
public class MyTimer extends Frame implements ActionListener {
启动线程的程序如下:看看会有什么效果
public class Example { public static void main(String[] args) { Visit v=new Visit(); Thread a=new Thread(v);Thread b=new Thread(v);Thread c=new Thread(v); Thread d=new Thread(v);Thread e=new Thread(v); a.start();b.start();c.start();d.start();e.start(); try {
Javase总结笔记终极版讲解
Javase复习笔记Day01:1.文档注释可以在:类,常量,方法上声明,分别用来说明它们的功能及作用。
文档注释会被javadoc命令在读取当前源程序的时候解析并使其生产说明文档2.int length():获取当前字符串中字符个数(长度),无论中英文每个字符都算一个长度。
3.int indexOf(String str):查找给定字符串在当前字符串中第一次出现的位置。
4.int indexOf(String str,int from):从当前字符串指定下标位置开始查找第一次出现给定字符串的位置。
5.int lastIndexOf(String str):查找当前字符串中最后一次出现给定字符串的位置。
6.String subString(int start,int end):获取指定字符串中部分内容,含头不含尾。
7.String trim():去除当前字符串中两边的空白。
8.char charAt(int index):获取当前字符串中指定位置对应的字符9.boolean startsWith(String str) boolean endsWith(String str):判断当前字符串是否以给定的字符串开头,另一个是判断是否是以给定的字符串结尾的。
10.String toUpperCase()、String toLowerCas():将当前字符串中的英文全部转换为大写或全小写。
11.Static String valueOf():字符串提供若干的静态方法valueOf()作用就是就将其他类型转换为字符串。
比较常用的是将基本类型转换为字符串。
Day02:1.boolean matches(String regex):验证当前字符串是否满足给定的正则表达式的格式要求,需要注意正则表达式是否使用了“^”,“$”都是全匹配验证。
2.String [] split(String regex):将当前字符串中满足正则表达式的部分“切掉”,保留剩余的部分。
Java SE应用部分-35.JAVA类集之一
Java SE应用部分-35.JAVA类集之一JAVA按以下重要顺序·面向对象·类集框架·JDBC·文件编程本季目标主要讲解以下的内容:·Collection·List·Set·Map·Iterator·ListIteator·Enumeration· for…each语句(JDK 1.5的新特性)·Comparable接口·二叉树1、类集结构(1)类集的产生目的类集简单来讲就是一个动态的对象数组,此对象数组可以改变大小,可以任意的实现对象的增加、删除、输出。
所有的类集存放java.util包中。
(2)类集的划分1、存放单值:Collection2、存放一对值:Map3、输出:Iterator(3)类集的具体概念<1>Collection(只能存放一个值)|- 主要功能:用于输出使用|- 子接口:List(允许有重复的元素,而且加入的顺序就是输出的顺序)|- 子类:ArrayList,是在Java 2之后推出的,是新的类,是使用异步处理方式,其性能较高|- 子类:Vector,是在JDK 1.0的时候就推出,因为是旧的类,有很多List所没有的功能,是使用同步处理方式,其线程安全性较高,会比较慢。
使用Vector除了可以使用Iterator输出之外,也可以使用Enumeration进行输出。
两者是通用的。
Vector子类允许直接使用add Element(Object obj),也是可以向集合中加入元素的。
|- 自己新增的方法:|- 取每一个对象:public Object get(int ind) ;|- 子类:Stack(栈)|- 子接口:Set(不允许有重复元素,重复元素会替换)?如何可以区分重复元素呢?|- 子类:HashSet:是无序列存放|- 子类:TreeSet:有序存放,是通过Comparable接口完成的|- 常用方法:|- 增加一个对象:public boolean add(Object obj)|- 取得类集的长度:public int size() ;|- 判断集合中的内容是否为空:public boolean isEmpty()|- 删除一个对象:public boolean remove(Object obj) :就必须牵扯到对象的比较状态。
JavaSE_2_编程基础
➢ 例:原码1011.01 = 1×23+0×22+1×21+1×20+0×2-1+1×2-2 = 8 +0+2+1+0+0.25
=11.25
❖ 十进制转换成二进制
➢ 整数部分:"除2取余,逆序排列"法 ➢ 小数部分:"乘2取整,顺序排列"法
2 89 2 44 … 1 2 22 … 0 2 11 … 0 2 5 …1 2 2 …1 2 1 …0 0 …1
6
Content
提 纲
❖ Java基本语法格式
➢ 标识符、关键字、常量
❖变量及变量的作用域
➢ 变量的作用域
❖ Java基本数据类型
➢ 基本数据类型之间的转换
❖ 运算符 ❖ 表达式和语句
➢ 条件语句 ➢ 循环语句
❖ 方法 ❖ 递归算法
7
Java高端培训
目标
Java高端培训
变量
❖ 变量:程序执行中数值可变的数据
JavaSE
Java编程基础
Content
提 纲
❖ Java基本语法格式
➢ 标识符、关键字、常量
❖ 变量及变量的作用域
➢ 变量的作用域
❖ Java基本数据类型
➢ 基本数据类型之间的转换
❖ 运算符 ❖ 表达式和语句
➢ 条件语句 ➢ 循环语句
❖ 方法 ❖ 递归算法
2
Java高端培训
目标
Java高端培训
❖ Java字符采用Unicode编码,每个字符占两个字节,因而 可用十六进制编码形式表示
➢ char c1 = '\u0061';
❖ Java语言中还允许使用转义字符'\'来将其后的字符转变为 其它的含义:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、Collection集合类的方法(带all方法的参数都为集合)添加和删除方法: Add() addAll() remove() removeAll()两个集合中的相同元素从调用removeall的方法中删除 clear()判断方法返回boolean:contains(元素) cotainsAll() isEmpty()其他方法Size() iterator()返回Iterator类型的迭代器retainAll()取交集与removeAll中的方法相反。
toArray()转数组一、List1.特点:有序(存入和取出的元素顺序一致)都有索引,可以重复(set相反)2.常用方法:添加删除传下标值:add(int index, E element)也可以直接addaddAll(int index, Collection c)也可以最直接添加集合Remove可以传下标也可以传元素(移除第一次出现的)判断:boolean equals()当且仅当指定的对象也是一个列表、两个列表有相同的大小,并且两个列表中的所有相应的元素相等才返回 true修改:set(int index, E element)替换制定位置的元素获取:get(int index),subList(int fromIndex, int toIndex)indexOf(Object o)返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1lastIndexOf(Object o)最后出现的,没有返回-1一、Vector特点:内部是数组结构,同步,增删查询都很慢,内部数据数组的大小为 10超出后100%的增长二、ArrayList特点:内部数组,不同步的代替了vector大小可变数组(创建一个数组将原来的数组复制到新数组中来)查询速度很快。
初始容量为 10 的数组超出后50%的增长Contains方法判断元素是否相同实际走的是equals方法重点案例:保证元素的唯一性。
通过重写hashCode ()方法和equals()方法Arraylist中去除重复的元素比较重复元素的时候先使用hashCode(),如果相等再判断equals()是否相等,如果为true则元素重复。
三、linklist特点:内部是链表的数据结构不同步,增删速度很快方法addFirst(E e)addLast(E e)add方法里面有具体操作位置的返回void类型反之返回boolean类型的。
offer默认插入到末尾offerFirst,offerLast,offer都有返回值PeekFrist(Last)和getFirst(Last)如果为空前者(jdk1.6)返回null而后者会抛出异常。
Pool(jdk1.6)移除poolFirst,poolLast和removeFirst和removeLast区别和上面一样。
类似的还有添加pool(jdk1.6)和add的区别与上同理。
面试题:队列FIFO 链表: FILO二、Set元素不重复,无序。
方法:和其父类方法完全一致。
一、HashSet特点:内部数据结构是哈希表,不同步。
性能很稳定,线程不安全存储速度快哈希算法能够给每个对象算出一个哈希值,哈希值指向某些地址,所以查找起来非常方便。
判断元素是否相同首先判断哈希值是否相同,如果相同就进行第二次判断看内容是否相同(用的是equals方法)。
1.LinkedHashset具有可预知的迭代顺序二、TreeSet特点:有指定顺序即按照元素的字典顺序来排序,不同步的。
判断是否相同的原理就是看返回值是否为0Comparable接口对实现它的每个对象进行整体的排序即自然排序。
小于大于等于分别返回负数正数和0案例一实现comparable接口自定义比较-----让元素自身具备比较功能在TreeSet里面存放一些person对象ts.add(new Person("zhanag",29));对存放的对象要求按照年龄来排序如果年龄相同按照姓名来排序。
方法,Person类实现conmarable接口重写compareTo方法然后迭代取出值:按照姓名如果姓名相同按照年龄排序案例二让集合具备比价功能实现Comparactor比较器接口将该类的对象作为参数传递给TreeSet集合的构造函数Comparactor新建集合的时候创建一个建立排序类的参数。
二、Map集合特点:键值对的映射集合,每次存储一个键值对,值可以重复键是不可以重复方法:1.put()添加元素有一个返回值,返回值得类型是值的类型,put(1,2)再次put(1,4)的时候2会被4替代返回的是被替代的值4。
2判断:containsKey(传递键)containsValue(传递的值)3判断集合中是否含有键值对isEmpty()。
4 containsKey 判断有没有这个键5 containsValue 判断有没有这个值6 keySet 键存储到Set集合7 entrySet 键值关系对象存储到Set集合重点:取出map集合的键值对由于map集合中没有迭代器,只能使用其他方法来获取方法1,利用Set集合进行获取Map接口中有一个方法,keySet() 将Map集合中的所有的键,存储到Set集合有了Set集合以后,迭代器Set集合,Set里面存储的都是键代码://使用Map集合的keySet方法,将Map集合中的键,存储到Set集合Set<String> set = map.keySet();//创建迭代器,迭代Set集合Iterator<String> it = set.iterator();while(it.hasNext()){//it.next()方法,获取的是什么,是键String key = it.next();//使用map中get方法获取值Integer value = map.get(key);System.out.println(key+"..."+value);}第二种方法,利用的键值对的映射关系来获取,好比通过结婚证,获得证上的两个人有一个接口,用来描述键值对的映射关系对象的代码://使用entrySet方法,获取键值对关系对象的Set集合Set<Map.Entry<String, Integer>> set = map.entrySet();//建立迭代器Iterator<Map.Entry<String, Integer>> it = set.iterator();while(it.hasNext()){//it.next()获取到的是什么呢,是键值对映射对象Map.EntryMap.Entry<String, Integer> entry = it.next();//有了键值对关系对象,getKey getValueString key = entry.getKey();Integer value = entry.getValue();System.out.println(key+"..."+value);}2.1、HashMap底层也是哈希表结构线程不安全的,执行效率快任何,包含null,可以存储null键,和null值HashMap存储自定义对象,并采用两种方法获取2.2、Hashtable底层也是哈希表结构,但是不存null值,null键Hashtable是线程安全的,执行效率低Hashtable JDK1.0开始类似于 Vector2.2.1、properties2.3、TreeMap可以对键进行自然顺序的排序,可以实现Comparactor接口Properties 类表示了一个持久的属性集。
与IO流配合使用。
值都是String由于Properties 继承于 Hashtable,所以 put 和 putAll 方法也能进行插入操作。
但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。
相反,应该使用 setProperty 方法。
同理取值也是一样的用getProperty(setProperty(get)两个方法固定只能存String类型的值)获取系统的属性也可获取单一的通过键去拿值2. Map集合|-- Map接口中的方法put 存储,键值对get 获取,根据键获取值containsKey 判断有没有这个键containsValue 判断有没有这个值keySet 键存储到Set集合entrySet 键值关系对象存储到Set集合3. HashMap|-- 底层哈希表,线程不安全,允许存储null|-- 存储自定义对象,重写hashCode 和 equals4. TreeMap|-- 红黑树,线程不安全|-- 存储自定义对象,重写compareTo方法|-- 传递比较器5. Hashtable|-- 线程安全的哈希表,不允许null多学一招:LinkedHashSet LinkHashMap 有序的set和有序的map,怎么存怎么取三、泛型Jdk1.5之后出现的,将运行时期出现的类型转换异常(存不同类型的数据)转换到了编译时期,泛型是给编译器使用的技术,用于编译时期,运行时会将泛型去掉生成.class文件这种机制叫做泛型的擦除。
目的是为了兼容类加载器。
在运行时不需要强转(如:迭代器获取的时候),是泛型的补偿机制为了避免安全隐患的出现在定义集合的时候就规定集合的类型(数组定义的时候要加类型int[]arr)3.1自定义泛型,了解读懂就行,就是为了安全性。
3.2泛型的方法和泛型类(Demo1代码),泛型接口:了解。
3.2.1泛型类3.2.2静态的方法泛型写在static的后面非静态的泛型方法3.2.3泛型接口1.子类实现后,直接,确定了数据类型2.子类实现后,不实现泛型,不指定数据类型,等到建立子类对象的时候,在指定泛型GenericDemo1.java GenericDemo2.java3.3泛型的通配符参照addAll(Collection<? extends E> c)其中问号也是通配符//可以迭代每个集合的方法,其中问号就是通配符,可以匹配任意的集合类型。
private static void method(Collection<?> c){Iterator<?> it = c.iterator();//不要进行强制转换while(it.hasNext()){System.out.println(it.next());}3.4泛型的限定上限限定:? extends E限定E类型,和E的子类类型,下限限定:?super E 限定了E的父类性,可以传递E类型,E的父类类型,下限限定Eg:private static void method(ArrayList<? extends Company> array){四、Collections工具类特点: Collections操作集合的工具类,方法全部静态,类名调用方法:1.Static sort(List )对List集合排序2.static sort(List Comparator)按照指定的比较器,进行排序myStringLength为自定义的类实现comparactor接口可以按照长度进行排序,第二个方法是逆转长度排序static Comparetor reverseOrder()运行结果是一个比较器,强行逆转对象的自然顺序(Comparable)需要和sort配合使用3.static reverseOrder(Comparator<T> cmp) 传递比较器,强行逆转比较器4.static int binarySearch(List,关键字)二分查找法array是一个集合,该语句的原理是查找集合中为2的元素的角标,如果没有返回负的插入点减一(先排序好的集合)。