JAVA基础-集合

Collection

图片说明
Collection

  • List
    • ArrayList
    • LinkedList
    • Vector(了解,已过时)
  • Set
    • HashSet
      • LinkedHashSet
    • TreeSet

Map

  • HashMap
    • LinkedHashMap
  • TreeMap
  • ConcurrentHashMap
  • Hashtable(了解,,已过时)

List集合

ArrayList

有序的集合,底层是数组,非同步。ArrayList的访问速度是要比LinkedList要快的,对于删除和修改而言消耗是比较大(复制和移动数组实现),LinkedList是双向链表删除和修改只需要修改对应的指针即可,消耗是很小的

Vector

Vector是同步的,有序的集合,底层是数组

LinkedList

LinkedList是双向链表,插入、删除和修改一般效率要高于ArrayList,但是也要看场景,LinkedList的遍历速度是要慢于ArrayList的复制移动速度的,如果数据量有百万级的时,还是ArrayList要快。

SET

Set具有和Collection完全一样的接口,不像List。Set和List最大的区别在于,Set是唯一的、无序的。“唯一的”表示Set不保存重复的原色,“无序的”表示Set中元素的存储是没有顺序的,不过如果真想要保持元素的顺序可以用TreeSet。所以对于Set,最常被使用的简单应用就是测试归属性,即判断某个元素是不是在Set集合里

对于Set,一般最常使用的就是HashSet,它专门对快速查找操作进行了优化。因为它的底层数据结构为散列表(即哈希表),有关散列的内容,我会在另外一篇文章中详细介绍。

Queue

通常情况下,LinkedList可以被用作Queue的一种实现,因为它实现了Queue的接口。不过还有一个类,叫PriorityQueue,它是一个比较标准的队列实现类,但不是绝对标准。因为PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。因此当调用peek()、pull()方法来取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。这其实违背了先进先出(FIFO)规则。

Map

HashMap

HashMap的是根据键的HashCode值来存储数据,数据的存储是无序的,其底层数据结构在Java 1.8后为数组+链表+红黑树, HashMap允许key和value都为null,key不允许重复,线程不安全

Hashtable

不允许key和value为null。是个线程安全的Map(已过时,数据增加到一定程度的时候,效率太低)

LinkedHashMap

LinkedHashMap保存了元素插入Map时的顺序

TreeMap

TreeMap实现了SortMap接口,所以它可以根据键进行排序。它默认的排序规则是升序排序

ConcurrentHashMap

ConcurrentHashMap 就是线程安全的 map,其中利用了锁分段的思想提高了并发度。锁的时候不锁整个hash表,而是只锁一部分,默认允许16条线程同时操作。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务