共计 1157 个字符,预计需要花费 3 分钟才能阅读完成。
平安的汇合都不能为 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 快。
正文完