Java集合常用的是List、Set、Map这个三个接口,对内容归纳下,以便后续有新的知识点扩张也好分清界限。
1、List主要实现:
线程不安全:
1)ArrayList:基于数组实现。
2)LinkedList:基于链表实现。
线程安全:
1)Vector:基于数组实现,安全基于同步锁实现
2)SynchronizedList:这个是Collections生成的内部类,其实就是封装了一层,用的同步锁。
3)CopyOnWriteArrayList:基于数组实现,安全基于ReentrantLock实现,add操作效率极差,没有扩容机制。
2、Set主要实现:
线程不安全:
1)HashSet:基于HashMap实现,用来去重。
2)TreeSet:基于TreeMap实现,用来去重加排序。
3)WeakHashMap:基于数组+链表,链表是WeakReference的子类,没用过,这一般也用的很少,使用场景也特殊,用来实现弱引用以便垃圾回收。
线程安全:
1)SynchronizedSet:这个是Collections生成的内部类,其实就是封装了一层,用的同步锁。
2)CopyOnWriteArraySet:基于CopyOnWriteArrayList实现,安全基于ReentrantLock实现。
3)ConcurrentSkipListSet:基于ConcurrentSkipListMap,安全基于CAS 。
3、Map主要实现
线程不安全:
1)HashMap:基于数组+链表+红黑树实现。
2)TreeMap:基于红黑树实现,用于有序。
线程安全:
1)HashTable:基于数组+链表,安全基于同步锁,性能差。
2)ConcurrentHashMap:基于数组+链表+红黑树实现,安全基于同步锁+CAS。
3)ConcurrentSkipListMap:基于链表实现,用于有序,有序基于跳表实现,安全基于CAS。