LinkedList
是一个双向链表,每一个元素被封装为一个节点,有序,可重复。
ArrayList
用一个数组来保存元素,当数组装满后开始扩容,扩容公式: int newCapacity = oldCapacity + (oldCapacity >> 1);是一种有序可重复的存储方式,默认容量为10。
HashMap
用一个数组来保存元素,允许null的key,无序不重复,根据key计算索引,具有相同索引的key用链表连接。扩容公式:2 * table.length,容量永远是2的整数倍,默认容量为16。
Hashtable
用一个数组来保存元素,方法都是线程安全的,不允许null的value和null的key。根据key的hash值来计算存储索引,计算索引公式为int index = (hash & 0x7FFFFFFF) % tab.length。相同的key会覆盖原来的value,并且是无序排列。当count >= threshold时开始扩容,公式: int newCapacity = (oldCapacity << 1) + 1;threshold = (int)Math.min(initialCapacity * loadFactor, MAX_ARRAY_SIZE + 1);默认容量为11。
HashSet
用一个Map来保存元素,map的key就是元素,每个key有相同的value。