java集合

java的集合类主要有两个接口派生而出,分别为:Collection和Map

Collection接口、子接口及实现类的继承数为:

1、Set集合 (不允许包含相同元素)

有三个实现类,分别为HashSet、TreeSet、EnumSet

1.1、HashSet

按照Hash算法来存储集合中的元素,因此具有很好的存取和查找性能

特点:

  • 顺序与添加顺序不同,可能发生变化
  • 不是同步的,多个线程如果访问同一个HashSet,同时修改时,必须用代码保持同步
  • 集合元素值可以为null

当在HashSet中加入一个元素时,会调用Hashcode()方法计算hashcode的值,然后决定存储的位置

如果两个元素调用equals()返回true,hashcode不同时,会存储在不同的位置

HashSet集合判断两个元素相等的标准是:通过equals()返回true,且hashcode方法的返回值相等,所以重写equals()和hashcode()时要保证equals()返回true时,hashcode值相同

当程序把可变对象添加到HashSet后,金莲不要修改参与计算hashcode()equals()的实例变量,否则将导致hashset无法正确操作这些集合元素

1.2、LinkedHashSet类是HashSet的子类

使用链表维护了元素的插入顺序,但是存储位置还是根据hashcode值确定

1.3、TreeSet是SortesSet接口的实现类,确保元素处于排序状态

  • 自然排序
  • 定制排序

当一个元素加入到TreeSet中时,调用CompareTo(Object object)方法与容器中的其他对象进行比较,如果相等,则不能插入

判断两个元素是否相等的标准是:两个对象通过CompareTo(Object object)是否返回0,如果返回0则相等

重写CompareTo(Object object)规则:当equals()方法返回true时,CompareTo(Object object)必须返回0

1.4、EnumSet为枚举类设计的集合类

有序

不能加入null

Set实现类性能比较

HashSet比TreeSet性能好(特别是常用添加和查询操作时)因为TreeSet需要额外的红黑树算法维护集合元素的次序

LinkedHashSet在执行插入删除操作时比HashSet性能差,遍历时更快一些

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

HashSet、TreeSet、EunmSet三个Set实现类都是线程不安全的

2、List集合(元素有序,可重复)ArrayList和vector两个实现类

  • ArrayList线程不安全
  • vector提供了Stack子类

3、Queue集合

3.1、PriorityQueue实现类

保存队列元素的顺序并不是安加入队列的元素,可是根据元素大小重新排序,也有两种排序方式,自然排序和定制排序

3.2、Deaue接口和ArrayDeque实现类

Deque是Queue的子接口,代表一个双端队列

不仅可以当做队列使用,还可以当做栈一样使用,提供了push()和pop()方法

3.3、LinkedList实现类

LinkedList不仅实现了List接口还实现了Deque接口,也可当做双端队列使用

内部以链表的形式存储数据,随机访问性能不好,但是插入和删除时比ArrayList和ArrayDeque性能好

Map集合(HashMap和HashTable)

两者不能保证元素的顺序一样,判断两个key相等的标准是:equals()返回true,且hashcode值也要相等

判断两个value相等的标准仅需要equals()返回true即可

HashMap和HashTable区别:

  • HashMap在存在key冲突时依然有较好的性能
  • HashTable是线程安全的,HashTable是线程不安全的
  • HashTable不允许使用null,HashSet可以使用Null

1.1、LinkedHashMap是HashMap的子类,需要维护元素的插入顺序

1.2、TreeMap实现类,红黑树结构,根据key值进行排序

1.3、WeakHashMap实现类

与HashMap用法基本相似,区别是HashMapde的key值保留了对实际对象的强引用,意味着只要HashMap对象不被销毁,所有key所引用的对象不会被垃圾回收

WeakHashMap对key保留弱引用,只要对象中的key所引用的对象没有被其他强引用变量引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对

原文地址:https://www.cnblogs.com/lili-work/p/9568087.html