Java集合

2018-03-12  本文已影响0人  牡丹福

四种体系:

Set:无序不重复

List:有序重复

Map:有映射关系

Queue:队列集合实现

两个接口:Collection(list set queue)和Map(根接口)

HashSet:不是同步;元素值可以是null。当向HashSet存入元素,调用该对象的hashCode()方法得到该对象的hashCode值,由值决定在在HashSet的存储位置。

两个元素相等的标准:equals()方法返回true,hashCode()相等

不要轻易修改HashSet的对象。

LinkedHashSet是Hashet的子类,使用链表维护元素次序

TreeSet是SortedSet接口的实现类,确保集合元素处于排序状态。只能添加同一种类型的对象

当一个对象加入加入TreeSet集合时,调用该对象的compareTo(Object obj)方法与容器其他方法比较大小,然后根据红黑树结构找到存储位置,若相等,无法添加。返回0表示相等。

EnumSet类

各Set实现类的性能分析

Hashset的性能优于TreeSet,除非需要一个保持排序的Set。遍历LinkedHashSet更快。

EnumSet是所有Set中性能最好的,但只能保存同一个枚举类的枚举值作为集合元素

这三个类都是线程不安全的,可以通过synchronizedSortedSet方法包装,在创建时进行。

SortedSet s = Collections.synchronizedSortedSet(new TreeSet());

List集合

集合的每个元素都有对应的顺序索引。允许重复元素,默认按添加顺序设置索引。

Void add (int index,Object element)

Object get/remove(int index)

List类的两个典型实现:ArrarList和Vector,都是基于数组实现,动态允许再分配。使用initialCapacity设置数组长度,超过时会自动增加。

显著区别,ArrayList是线程不安全的

ArrayKust LinkedList是线性表的典型实现,基于数组和链。LinkedList提供了双端队列、栈的功能。总体上A的性能好。遍历集合,A和V使用随机访问方法(get),L使用迭代器(iterator)

Queue集合

PriorityQueue按队列大小重新排序,而不是先进先出

Map集合

List有数字索引,Map用key索引。从源码上看,包装所有value为null的Map即可实现Set。

HashSet和Hashtable(古老的类):

Table线程安全,不能有key或value为null。Map允许有key或value为null

判断key需要hashnode和equals。判断value只要equals

上一篇下一篇

猜你喜欢

热点阅读