集合
1,集合与数组的区别
a,数组元素既可以是基本类型,也可以是对象;
集合元素只能是对象。
b,数组长度固定;集合长度不固定;
c,数组只能存同一类型的元素;集合可以存不同类型的元素。
2,集合体系:
1)单列集合体系
Collection(接口)
|-----List(接口)元素有序,可重复
|-----ArrayList
|-----Vector
|-----LinkedList
|------Set(接口)元素无序,且唯一
|-----HashSet
|-----TreeSet
2)双列集合体系
MAP(接口)
|------HashMap
|------TreeMap
注:元素有序无序是指,存入和取出的顺序是否一致。
3,Collection接口
1)是List、Set和Queue接口的接口
2)相关方法
A,添加功能:
add() 向集合中添加一个元素
addAll()向集合中添加一个集合的元素
B,删除功能:
remove()删除集合中指定的元素
removeAll删除集合中指定的一个集合的元素
clear()清除本集合中的所有的元素
C,判断功能:
contains()判断集合中是否存在目标元素
containsAll()判断集合中是否存在指定集合中所有元素
isEmpty()判断集合是否为空
D,长度功能:
size()获取集合中元素的个数
E,遍历功能:
iterator()获取集合中每一个元素
4,Iterator接口
1)作用:
遍历(迭代访问)Collection集合中的元素
2)三个方法:
boolean hashNext()如果被迭代的集合元素还没有被遍历,返回true;
Object next()返回集合中下一个元素
void remove()删除集合里上一次next方法返回的元素
3)当使用Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变。
5,Set集合
1)不允许包含相同的元素
6,HashSet类
1)特点
a,不能保证元素的排列顺序,顺序可能发生变化;
b,HashSet不是同步的,如果多个线程同时访问一个HashSet,且同时修改HashSet集合时,必须通过代码来保证其同步
c,集合元素可以是null值
2)HashSet集合判断两个元素相等的标准
两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。
3)重写hashCode()方法的基本规则
a,在程序运行过程中,同一个对象多次调用hashCode()方法应该返回相同值;
b,当两个对象通过equals()方法比较,返回true时,这两个对象的hashCode()方法应返回相等的值
c,对象中用作equals()方法比较的标准的Field,都应该用来计算hashCode值
7,LinkedHashSet类
1)使用链表维护元素的次序,故元素很像以插入顺序保存。
8,TreeSet类
1)是SortSet接口的实现类,确保集合元素处于排列状态
2)向TreeSet中添加对象,应该是同一个类的对象。
3)两种排序方法:
A,自然排序,实现Comparable接口中的compareTo方法
eg:obj1.compareTo(obj2)
返回0,这两个对象相等;
返回正整数,obj1>obj2;
返回负整数,obj1<obj2;
B,定制排序,需要在创建TreeSet集合对象是,提供一个Comparator对象与该集合相关联。
其中包含一个int compare(Object obj1,Object obj2)方法
eg: compare(obj1,obj2)
返回0,obj1 = obj2;
返回正整数,obj1>obj2;
返回负整数,obj1<obj2;
9,List集合
1)代表一个元素有序、可重复的集合。
2)List提供的listIterator方法,具体用法,详见api
10,ArrayList和Vector实现类
在向ArrayList或者Vector集合中添加大量元素时,可以使用ensureCapacity(int minCapacity)方法一次性增加initialCapacity,这样可以减少分配次数,提高性能。
11,固定长度的List
通过Arrays.asList()方法生成的list集合,该集合的长度固定,不能增加和删除集合的元素。
12,从线程安全的角度思考
不安全的有:HashSet、TreeSet、ArrayList、LinkedList
安全的有:vector
13,使用List集合建议
1)遍历元素
ArrayList:Vector随机访问方法(get);LinkedList;采用迭代器(Iterator)遍历
2)对于经常执行插入、删除操作改变List集合的大小的情况,应使用LinkedList集合。
3)若多个线程需要同时访问List集合中的元素,可以考虑使用Collections将集合包装成线程安全的集合。 |
|