技术复习-java集合类

经常使用集合 Set MAP List

一.List

  1. ArrayList 由数组构成的List object[] elementData 实际存储的数组 int size 实际长度 int DEFAULT_CAPACITY = 10 初始容量10. 扩容过程:put的时候若是size+1>elementData.length,则对elementData扩容至1.5倍数组

  2. LinkedList 由双向链表构成的数组安全

  3. Vector 由数组构成的线性安全的List 在每一个方法前加synchronized来保证安全。优化

2、Map

保存KV对,K不可重复code

  1. HashMap Node<K,V>[] table 实际存储是由链表组成的数组。 int DEFAULT_INITIAL_CAPACITY = 1 << 4 数组默认长度16 final float loadFactor; 负载因子,初始值0.75.当前数组长度 * loadFactor来判断是否须要扩容。 int threshold ; The next size value at which to resize (capacity * load factor). 扩容过程:若是size+1 > threshold 则进行扩容,table长度扩大2倍。而后链表上的一一挪到正确的新的数组上。

1.8之后HashMap下的链表进行优化了,改为当链表的长度大于8的时候优化成红黑树。blog

  1. ConcurrentHashMap 线性安全的,经过分段把锁的粒度下降,提升效率ci

  2. Hashtable 线性安全,经过方法前加上synchronized来锁,效率较低。element

3、HashSet

保存K HashMap<E,Object> map; public boolean add(E e) { return map.put(e, PRESENT)==null; } HashSet内部实际是一个HashMap,把值做为Key放入HashMap中。it

相关文章
相关标签/搜索