TreeSet、TreeMap、HashSet、HashMap、HashTable、ArrayList、LinkedList、Vector集合的全部比较

时间:2021-11-21 17:55:09

TreeSetTreeMap的区别与联系:

TreeSet里面的绝大部分方法都是直接调用TreeMap方法来实现的。

相同点:

1.      TreeMapTreeSet都是有序的集合,也就是说它们存储的值都是排好序的;

2.      TreeMapTreeSet都是非同步集合,因此它们不能在多线程之间共享;

3.      运行速度都比Hash集合慢,它们内部对元素操作的时间复杂度为O(logN),而HashMapHashSet则为O(1)

不同点:

1.      最主要的区别就是TreeSet实现了Set接口,而TreeMap实现了Map接口;

2.      TreeSet只存储一个对象,而TreeMap存储两个对象KeyValue(仅仅Key对象有序);

3.      TreeSet中不能有重复的对象,而TreeMap中可以存在。


HashSetHashMapHashTable的区别与联系:

区别:

1.      HashSet继承自AbstractSet类,实现了Set接口,HashMap继承自AbstractMap类,实现了Map接口,HashTable继承自Dictionary类,实现了Map接口;

2.      HashTable中的方法是Synchronize(线程安全)的,而HashMap中的方法是非Synchronize(线程不安全)的,因为HashSet中的方法都是HashMap实现的,所以也是线程不安全的;

3.      HashMapKey-Value的形式存储对象,Key不能重复,但可以为null,但这样的键只能有一个;而HashSet只存储一个对象并且不能有重复的对象,可以有一个null值;HashTable不允许null值(键与值均不能为空);

4.      HashMapHashSet初始大小为16HashTable初始大小为11

5.      内存扩容方式:HashTable采用的是2*old+1,而HashMapHashSet都是2*old

6.      哈希值的计算方法不同,Hashtable直接使用的是对象的hashCode,HashMap则是在对象的hashCode的基础上还进行了一些变化(先计算hashcode,然后再求其在哈希表的相应位置)。

联系:

1.      HashSet底层方法是用HashMap来实现的,所以很多性质都相同:都是线程不安全的,Key都不能重复,初始大小都为16,扩容方式都是2*oldhashCode的计算方式也相同;

2.      HashTableHashMap都是以Key-Value的形式存储对象;

3.      HashTableHashMap都实现了Map接口。


ArrayListLinkedListVector的区别与联系:

区别:

1.      ArrayListLinkedList是非Synchronize(线程不安全)的而Vector是线程安全的,所以如果多线程情况下可以使用Vector

2.      ArrayListVector采用数组方式存储数据,所以数据的插入较慢,查询较快;LinkedList采用双向链表存储数据,查询时需要按序号索引向前或向后遍历,速度较慢,而插入数据只需记录本项前后项即可,插入数据较快;

3.      ArrayList的默认初始容量为10(用户可自己定义初始容量),增长为原来的1.5倍(java1.7之前的为oldCapacity*1.5+1java1.7之后为1.5倍);

LinkedList默认初始容量为1,每次增长的容量为1

Vector默认初始容量为10,每次增长为原来的2倍;

联系:

1.      都是实现了List接口;

2.      ArrayListLinkedList是线程不安全的;

3.      ArrayListVector都是采用数组方式存储数据;