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,得到下标(通过算法)
判断数组中是否有这个下标,如果没有,就占用一个数组空间,保存这个对象
如果有