您的位置:首页 > 编程语言 > Java开发

JAVA,List,Map,Set,容器

2014-03-30 10:45 239 查看
1.collection:集合层次中的根接口,jdk没有提供这个接口直接实现的类。
  2.set是一个无序的Collection,不能包含重复的元素。

  3.list:是一个有序的Collection,可以包含重复的元素,提供了按索引访问的方式。

  4.map: 请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法.

由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。

  如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。

若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

1、Collection 和 Map 的区别

容器内每个为之所存储的元素个数不同。

Collection类型者,每个位置只有一个元素。

Map类型者,持有 key-value pair,像个小型数据库。

2、各自旗下的子类关系

Collection

--List: 将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。

--ArrayList / LinkedList / Vector

--Set : 不能含有重复的元素

--HashSet / TreeSet

Map

--HashMap

--HashTable

--TreeMap

3、其他特征

* List,Set,Map将持有对象一律视为Object型别。

* Collection、List、Set、Map都是接口,不能实例化。

继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。

* vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。

结论:最常用的是ArrayList,HashSet,HashMap,Array。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: