秋招面试准备-------set Hashset, Map 复习

Set

1.无序性:不等于随机性.存储的数据在底层数组中并非按照数据索引的顺序进行添加的,而是根据数据的哈希值进行添加的顺序.

2.不可重复性:保证添加的元素按照equals()判断时,不能反回true.即相同的元素智能添加一个

分析:添加元素的过程:一HashSet 为例:

       我们向HashSet中添加元素a,首先调用元素a所在类的hashcode()方法,计算元素a的哈希值.

通过此哈希值截止通过某种算法计算出在hashSet底层数组中的存放位置,判断数组此位置上是否已经有元素了:

   情况1.如果此位置已经没有其他的元素,则元素a添加成功.

   情况2. 如果此位置已经有其他的元素,则需要调用元素a所在类的equlas()方法:

                   equals()为true,元素a添加失败.

                   equals()为false,则元素a添加成功.

 

对于添加成功的情况:元素a与已将存在的指定索引位置上的数据一脸标的范式存储.

jdk7:元素a放大数组中,指向原来的元素.

jdk8:原来的元素在数组中,指向a.

如图所示:

Map:双列数据,存储key-value对的数据.

HashMap:作为Map的主要实现类,线程不安全的,但是效率高.可以存储null的key和value

LinkedHashMap:保证按照添加的key-value对进行排序,实现排序遍历.此时考虑key的自然排序或者定制排序

Hashtable:作为古老的实现类,新城安全的,效率低,不能存储null的key和value

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值