星期二, 十月 10, 2006

20061010:java集合

一.java主要集合类之间的关系

二.Set
Set继承自Collection,集合中对象不排序,并且没有重复的对象.Set有两个实现类:HashSet,TreeSet.
Set中存放对象的引用,并且没有重复的对象.向Set中添加一个对象引用的时候,Set判断是否已经存在,用的是对象的equals方法,而不是操作符==.
1.HashSet
HashSet按照哈希算法来存取集合中的对象.当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法获得哈希码,然后根据哈希码计算出存放的位置.
为保证HashSet正常使用,要求当两个对象用equals比较结果为true时,其hashCode也要相等.即:
如果obj1.equals(obj2)==true,那么obj1.hashCode()==obj2.hashCode().

2.TreeSet
插入TreeSet的对象,要求实现Comparable接口.

注意:equals和==的区别:
1.==可以对基本类型(int,double,char等),引用类型进行比较.
如果是比较基本类型,则看其值是否相等.
如果是比较引用类型,则看两边是否引用同一对象.
2.equals只能对引用类型进行比较.
当比较双方是引用自同一个对象,则返回true.否则false.
说明:上面的equals方法是Object的equals方法,如果某些类覆盖了Object的equals方法,则会有不同的比较规则.比如java的包装类和String类都覆盖了equals方法,只要内容一致,就算对象不同也返回true.

三.List
List继承自Collection
List以线性方式存储,允许存放重复对象.实现类包括:ArrayList,LinkedList.
ArrayList随机访问元素速度较快,插入与删除较慢.
LinkedList随机访问元素较慢,插入与删除较快.
为List排序,可借助Collections类和Comparator接口.
Collections.sort(List list);//对List中对象进行自然排序
Collections.sort(List list,Comparator comparator)//对List中对象进行客户化排序

四.Map
Map不继承自Collection.
Map是把键(Key)对象和值(Value)对象进行映射的集合.通过put(Object key,Object value)方法向集合中加入元素,通过get(Object key)方法来检索对应的值对象.
Map集合中键对象不允许重复,值对象可以重复.
Map的entrySet()方法返回一个Set集合.
Map的两种实现:HashMap和TreeMap.

五.HashSet和HashMap的负载因子
HashMap和HashSet都有如下属性
容量capacity:哈希表中桶的数量
初始容量initial capacity:创建HashSet和HashMap时的桶的数量.在HashSet和HashMap的构造方法中允许设置初始值.
大小size:元素的数量
负载因子:size/capacity.越小负载越轻.HashSet和HashMap默认的负载因子为0.75,即当负载因子到了0.75时,HashSet和HashMap自动成倍增加容量.

六.集合使用类Collections
Collections类中有一些专门用于操纵List的方法,有一部分用于操纵所有Collection类型和Map类型的方法.
操纵List的方法:
copy(List dest,List src)//把一个List中的元素拷贝到另一个List中.
fill(List list,Object o)//向列表中填充元素
sort(List list)//对List中的元素进行自然排序
binarySearch(List list,Object key)//查找List中与给定对象key相同的元素.在调用该方法时,必须保证List中元素已经自然排序.
binarySearch(List list,Object key,Comparator c)//同上,但必须保证List元素已经按照Comparator类型参数的比较规则排序.
操纵Collection类型或者Map类型的方法:
Object max(Collection coll)//返回集合中最大元素,按自然排序
Object max(Collection coll,Comparator comp)//返回集合中最大元素,按指定规则
Object min(Collection coll)//
Object min(Collection coll,Comparator comp)//
Set singleton(Object o)//返回一个不可变的Set集合,它只包含一个对象o
List singletonList(Object o)//返回一个不可变的List集合,它只包含一个对象o
Map singletonMap(Object key,Object value)//返回一个不可变的Map集合,它只包含指定的键key和值value.

没有评论: