_17_排序,散列表和Hash,MAP泛型和Map转型list

1 要添加的元素对应的类实现java.lang.Comparable接口,并实现其中的compareTo方法
2 让集合做到排序还有另外一种方式,java.util.Comparator比较器接口,写一个比较器类,在元素添加之前先进行比较
如果两个比较器都有,优先使用Comparator
在这里插入图片描述

散列表
Hash算法 :
是一种安全的加密算法,把不定长的值改为定长的值,但不能保证其值的唯一性,java中就是指hashCode()方法
目标 : 给每个对象生成一个唯一的标识符
下标不在是 0 , 1 ,2 … 而是 对应的hash值
哈希冲突 : 同一个对象,生成多次的值,肯定相同,但是不同的对象,生成的值也有可能相同
Hash的目的 就是为了查询快,hash值就是一个固定的数值,整型值,所以在定长数据的情况下,查询非常快

1 hash过程
拿到对象,调用对象的hash算法(hashCode方法),然后对这个hash值进行算法,作为数组的下标,然后把这个值保存到数组中

HashMap 怎么向Hash表中添加元素
1 添加的时候,HashMap保存的是映射关系(Entry(K,V))
如果生成了重复hash值,会保存到一个单向链表中
单向链表中,保存的是Entry对象
在这里插入图片描述
2 重点 : 先调用要存储的映射关系的key对象,然后调用key对象的hashCode()方法,生成hash码,然后对这个hash码进行hash,得到下标(通过算法)
判断数组中是否有这个下标,如果没有,就占用一个数组空间,保存这个对象
如果有

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值