java集合的定义_#java#集合#基本概念

集合专题

HashSet

HashSet不是按照存储元素的顺序写入的,而是通过按照哈希值来存的,所有取数据也是按照哈希值取得,HashSet首先

判断两个元素的哈希值,如果哈希值相同,会接着比较 equals方法。 hashset通过 hashCode的值来确定元素在内存中的位置,

一个hashcode位置有多个元素。

TreeSet

自定义的对象必须要实现 Comparable的接口,重写 compareTo的函数 才能使用。也可以策略模式,自己定义一个比较器

LinkedHashSet(HashSet + LinkedHashMap实现)

底层使用的是 LinkedHashMap保存对象,但是又继承了 HashSet的方法,直接调用的 HashSet的方法。

HashMap(数组,链表,红黑树)

HashMap 根据键值的Hashcode存储数据,一般情况下可以直接定位它的值。 HasHMap里面是一个数组,数组的每个元素都是一条单向链表

c6bcc7bca640d8eeabe14a2b6b867b14.png

capacity: 数组的容量,始终保持为 2N, 扩容后数组大小是当前两倍

loadFactor,负载因子,默认为 0.75

threshold: 扩容的阈值,达到这个阈值了,就会扩容 ,等于 capacity*loadFactor

java 8对 Hashmap做了改进,当 数组容量大于 64,且链表中的元素超过8个以后,这个链表会转为红黑树。

选择8是因为符号泊松分布,超过8的时候,概率已经非常小了.所以选择8

ConcurrentHashMap

ConcurrentHashMap在8以前使用的是一个 Segment数组继承了 ReentrantLock加锁,每次加锁锁住一个 Segment,每个segment是线程安全的,因此也就整一个 HashMap都是线程安全的了。

c6f43438d9ddabde56ab0a5a0ed146a7.png

concurrentcyLevel: segment的数量,也就是并行级别,segment数量决定了一个 ConcurrentHashMap 的最大线程并发数量是多少。 ConcurrentHashMap 默认 16个segments,理论上只能同时支持最多16个线程的并发。

java8则是 使用了 CAS的方法来优化。而且 ConcurrentHashMap也是使用了红黑树。

TreeMap

实现了 SortedMap接口,可以根据键值来排序,

TreeMap

LinkedHashMap

遍历时候 会按照插入的顺序进行遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值