平安的汇合都不能为null。
Collection为List、Set父接口
List能够存储反复的元素
List |
数据结构 |
劣势 |
劣势 |
ArrayList |
数组 |
因为底层为数组,有下标所以查问快。 |
因为底层是数组,所以每次进行增删操作时,都须要从新创立。 |
LinkedList |
双向链表 |
因为底层是链表,每次增删数据时,只须要从新连贯头节点和尾节点,所以增删快。 |
因为底层是链表,每次查问数据时,都须要从新开始查问,所以查问慢。 |
Vector |
数组 |
特点和ArrayList一样,然而底层加了锁,所以是平安的汇合。 |
因为加了锁所以该汇合的效率慢。 |
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快。
发表回复