容器2

接上文:

Map就是套中套  外面List 数组 然后再List  然后里面的list  存储链表value值   (不是说键值不可以重复为什么要又数组又链表呢 其实是因为  这里的数组下标是hashcode值  键值不相等不一定重写的hashcode不相等   然后   这样通过hashcode找到这个位置之后还需要去寻找相等的键值     那你又会问为什么要这么麻烦呢    简单的说其实就是提升效率的问题   如果你不这样  那和Linklist又有什么区别   一样查找很慢很慢   要一个个往后移动查对应的键值是否相等   如果采取数组加链表的话  那么 查找的范围就要小特别多了 效率就上来了)

Map底层实现:数组加链表

equals和hashcode:

java中规定  相同对象  也就是用equals判断相等的时候   那么  他们的hashcode一定要相等  反之则不然

比如   Map 底层数组加链表实现         确定在那个list里面是通过hashcode  判断的     但是内容是不是相等  是要经过遍历  。

native  本地方法   源码里面没实现哈

 

如果equals为true   hashcode应该相等   反之不一定 

List和Map小细节:

获得索引值 可以看是都大于一半长度进行查找·  效率高些

hashcode 可以是负数   转为正数(因为负数可能出问题    ,数组下标为负数     不太好吧对吧)

 

Set

hashSet底层是  hashMap实现的。

PERSENT是常量。

 

练习:

思路一:

然后一个对象对应一条记录    用ArrayList  存储对象。

思路2:

用Map存一条记录,用ArrayList 存储hashMap 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值