Java知识:各集合比较

2018/10/10

各集合比较

TreeSet和TreeMap的区别与联系

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

相同点:

  • 1.TreeMap和TreeSet都是有序的集合,也就是说它们存储的值都是排好序的;
  • 2.TreeMap和TreeSet都是非同步集合,因此它们不能在多线程之间共享;
  • 3.运行速度都比Hash集合慢,它们内部对元素操作的时间复杂度为O(logN),而HashMap和HashSet则为O(1)。

不同点:

  • 1.最主要的区别就是TreeSet实现了Set接口,而TreeMap实现了Map接口;
  • 2.TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅Key对象有序);
  • 3.TreeSet中不能有重复的对象,元素是唯一的,TreeMap中的Key不能重复,而Value可以重复。

HashSet、HashMap和HashTable的区别与联系

区别:

  • 1.HashSet继承自AbstractSet类,实现了Set接口,HashMap继承自AbstractMap类,实现了Map接口,HashTable继承自Dictionary类,实现了Map接口;
  • 2.HashTable中的方法是Synchronize(线程安全)的,而HashMap中的方法是非Synchronize(线程不安全)的,因为HashSet中的方法都是HashMap实现的,所以也是线程不安全的;
  • 3.HashMap是Key-Value的形式存储对象,Key不能重复,但可以为null,但这样的键只能有一个;而HashSet只存储一个对象并且不能有重复的对象,可以有一个null值;HashTable不允许null值(键与值均不能为空);
  • 4.HashMap和HashSet初始大小为16,HashTable初始大小为11;
  • 5.内存扩容方式:HashTable采用的是2old+1,而HashMap和HashSet都是2old;
  • 6.哈希值的计算方法不同,Hashtable直接使用的是对象的hashCode,而HashMap则是在对象的hashCode的基础上还进行了一些变化(先计算hashcode,然后再求其在哈希表的相应位置)。

联系:

  • 1.HashSet底层方法是用HashMap来实现的,所以很多性质都相同:都是线程不安全的,Key都不能重复,初始大小都为16,扩容方式都是2*old,hashCode的计算方式也相同;
  • 2.HashTable和HashMap都是以Key-Value的形式存储对象;
  • 3.HashTable和HashMap都实现了Map接口。

ArrayList、LinkedList、Vector的区别与联系

区别:

  • 1.线程安全

ArrayList和LinkedList是非Synchronize(线程不安全)的而Vector是线程安全的,所以如果多线程情况下可以使用Vector;

  • 2.查询、插入速度

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

  • 3.初始容量和扩容

ArrayList的默认初始容量为10(可自定义),增长为原来的1.5倍(java1.7之前的为oldCapacity1.5+1,java1.7之后为1.5倍);
LinkedList默认初始容量为1,每次增长的容量为1;
Vector默认初始容量为10,每次增长为原来的2倍

联系:

  • 1.都是实现了List接口;
  • 2.ArrayList和LinkedList是线程不安全的;
  • 3.ArrayList和Vector都是采用数组方式存储数据;





github: https://github.com/Hikiy
作者:Hiki
创建日期:2018.10.10
更新日期:2018.10.10

(转载本站文章请注明作者和出处 Hiki

Post Directory