安全的集合都不能为null。
Collection为List、Set父接口
List可以存储重复的元素(有序)
List | 数据结构 | 优势 | 劣势 |
---|
ArrayList | 数组 | 因为底层为数组,有下标所以查询快。 | 因为底层是数组,所以每次进行增删操作时,都需要重新创建。 |
LinkedList | 双向链表 | 因为底层是链表,每次增删数据时,只需要重新连接头节点和尾节点,所以增删快。 | 因为底层是链表,每次查询数据时,都需要重新开始查询,所以查询慢。 |
Vector | 数组 | 特点和ArrayList一样,但是底层加了锁,所以是安全的集合。 | 因为加了锁所以该集合的效率慢。 |
toArray():将集合转换为数组。
asList():将数组转换为集合。
Set不可以存储重复的元素(无序)
Set | 数据结构 | 特点 |
---|
HashSet | 数组+链表/红黑树JDK1.8 | 无序集合,线程不安全,存储和取出的顺序不同。 |
LinkedHashSet | (数组+链表/红黑树JDK1.8)+链表 | 有序集合,线程不安全,存储和取出元素顺序相同。 |
TreeSet | 二叉树 | 元素是有大小顺序的。 |
HashSet:
1、对存储的元素进行HashCode方法进行计算其哈希值。
2、然后存储进数组中,如果哈希值相等,那么就会发生哈希冲突。
3、那么就会调用equals方法比较值是否相等。
4、如果值相等那么存储一个对象进链表中,如果不等都存储到链表中。
5、如果链表的数量等于8时,那么该链表将转为红黑树(JDK1.8特性)。
6、如果链表的数量等于6时,那么又将转为链表。(7为两者频繁转换做中间值)
LinkedHashSet:底层加多个链表,记录元素的存储顺序,保证元素有序。
Map<key,value>结构,key为唯一值。
Map | 数据结构 |
---|
HashMap | 数组+链表/红黑树(JDK1.8) |
LinkedHashMap | (数组+链表/红黑树(JDK1.8))+链表 |
HashTable | 哈希表 |
ConcurrentHashMap | 数组+链表/红黑树(JDK1.8) |
HashMap:哈希表=数组+链表
1、对存储的元素进行HashCode方法进行计算其哈希值。
2、然后存储进数组中,如果哈希值相等,那么就会发生哈希冲突。
3、那么就会调用equals方法比较值是否相等。
4、如果值相等那么存储一个对象进链表中,如果不等都存储到链表中。
5、如果链表的数量等于8时,那么该链表将转为红黑树(JDK1.8特性)。
6、如果链表的数量等于6时,那么又将转为链表。(7为两者频繁转换做中间值)
7、HashMap<k,value>中的k为HashSet的底层结构。(链表中存储<k,vaule>)
LinkedHashMap:底层加多个链表,记录元素的存储顺序,保证元素有序。
HashTable:整个底层加了锁所以它是安全的集合,但是效率慢。
ConcurrentHashMap:底层也加了锁,但是锁加在链表中,所以它是安全的集合,
而且速率比HashTable快。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。