Java集合总结

Collection(单列集合)

  List接口特点:元素存取有序 有索引 可重复

    ArrayList

      有序 有索引 可重复

      底层使用数组,查询快增删慢

      线程不安全

    Vector

      有序 有索引 可重复

      底层使用数组,查询快增删慢

      线程安全,效率低

    LinkedList

      有序 有索引 可重复

      底层使用双向循环链表结构,查询慢,增删快,add()和remove()方法快

      提供了大量特有的首尾操作的方法

      线程不安全

  Set接口的特点:元素存取无序(按照其内部的特有顺序) 无索引 不可重复

    HashSet

      排列无序,元素无索引 不可重复

      底层使用Hash表(JDK1.8中数组+链表/红黑树,当一个链表存储元素超过8个后,就会转为红黑树)实现,具有良好的存取和查找性能

      内部是HashMap

    TreeSet

      排列无序,元素无索引 不可重复

      底层使用二叉树实现

      排序存储

      内部是TreeMap的SortedSet

    LinkedHashSet

      排列有序,元素无索引 不可重复

      底层使用 哈希表(JDK1.8中数组+链表/红黑树)+链表

      内部是LinkedHashMap

  Queue

      在两端出入的list,也可以用数组或链表实现

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Map(双列集合)特点:键值对一一对应,键不能重复 值能重复

  HashMap

      键不可重复,值可重复

      底层使用 哈希表(数组+链表/红黑树,当一个链表存储元素超过8个后,就会转为红黑树)

      线程不安全

      key和value都可以为null

      HashMap基于Hash算法实现的,我们通过put(key,value)存储,get(key)来获取,当传入key时,HashMap会根据key.hashCode()计算出hash值,根据hash值将value保存到bucket中,当计算出的hash值相同时,我们称之为hash值冲突,HashMap的做法是用链表和红黑树存储相同hash值的value。当hash冲突个数较少时(8),使用链表否则使用红黑树

  HashTable

      键不可重复,值可重复

      底层Hash表

      线程安全

      key和value都不能为null

      是遗留类,基本不用

  TreeMap

      键不可重复,值可重复

      底层二叉树

      能根据键排序,key必须实现Comparable接口或在构造TreeMap时传入自定义的Comparator

  SynchronizedMap

      线程安全

  ConcurrentHashMap

      线程安全

      由一个个segment(分段锁)组成,相当于一个segment数组,通过集成ReentrantLock来进行加锁,所以每次需要加锁的操作锁住的是一个segment,只要保证每一个segment是线程安全的,那么整个 ConcurrentHashMap就是线程安全的

不经历风雨,怎能见彩虹?做一个快乐的程序员。
原文地址:https://www.cnblogs.com/Mr-Elliot/p/13445287.html