Java集合分类以及各自特点

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

image.png

结构图:

image.png

List是有序的(存取顺序),可以有重复的元素,有索引,可以存在多个空值

Set是无序的(存取顺序),不能有重复元素,无索引值,只能存在一个空值

1.List下面的三个子集合的区别

Vector:
    底层数据结构是数组,查询快,增删慢,线程安全,效率低,默认长度为10,超过会100%延长,变成20,浪费空间

ArrayList:
    底层数据结构是数组,查询快,增删慢,线程不安全,效率高,默认长度为10,超多就会new,一个新的数组50%延长,节省空间

LinkedList:
    底层数据结构是链表(双向链表),查询慢,增删快,线程不安全,效率高,支持头插和尾插等操作,可以当做堆栈(stack),队列(queue)或双向队列(deque)

2.Set集合下面的三个子集合的区别:

HashSet:
    底层数据结构是哈希表(无序,唯一),通过hashcode()和equals()保证元素唯一。

LinkedHashSet:
    底层数据结构是链表和哈希表(FIFO插入有序,唯一),由链表保证元素有序,由哈希表保 证元素唯一。

TreeSet:
    底层数据结构是红黑树(唯一,有序),通过自然排序和比较器排序保证元素有序,根据比较返回值是否是0来保证元素唯一性。

如何使用Collection集合:

是否唯一?
     是:Set
         是否排序?
             是:TreeSetLinkedHashSet
             否:HashSet
             如果只知道用Set,但是不知道用哪个,就用HashSet
     否:List
         是否线程安全?
             是:Vector
             否:ArrayListLinkedList
                 查询多:ArrayList
                 增删多:LinkedList
                 若果只知道用List,不知道用哪个,就用ArrayList

Map:

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable

TreeMap是有序的,HashMap和HashTable是无序的

HashTable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别

HashMap和HashTable的区别:

HashTable是线程安全的,HashMap不是线程安全的

HashMap效率比较高,HashTable效率比较低

如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。

HashTable的所有public方法声明都有synchronized关键字,而HashMap没有

HashTable不允许null值,HashMap允许(key和value都可以)

HashTable的父类是Dictionary,HashMap的父类是AbstractMap