两种比较器:
java.lang.Comparable接口,并实现compareTo方法
java.util.Comparator
set特点:无序,不可重复,添加顺序和取出顺序不一定一致
Set ->SortedSet ->TreeSet :
底层是红黑树,要添加的元素必须按照某个规则进行排序
数字 默认升序,字符串,默认比较每一位的ASCLL码值,
时间 默认自然日起昨天,今天,明天
String Intrger Date 都实现了Comparable接口,并实现了compareTO方法,
因此可以排序,但如果添加其他元素,尤其是自定义类型的时候,就不行了,
需要实现Comparable接口并调用compareTo()方法
Comparator
Comparator优先级大于Comparable
可利用Comparator的优先级来定义排序规则
自定义类型进行排序,优先使用Comparable,无法满足需求再用comparator进行扩展
若是定义好的类型,则只能通过comparator进行扩展
总之其他类型无法满足我们的排序规则的时候,都可以使用comparator进行扩展排序
list想要排序,元素必须实现comparable接口
如果元素自身没有实现comparator接口,是不能调用sort方法的,会报错
若要比较,不论是否实现comparable接口,都可使用comparator进行比较
sort方法要有一个重载,接收comparator
散列表:数组中保存的的链表
HashSet底层就是HashMap的key部分,屏蔽了HashMap的value
而HashMap底层是散列表
添加过程:
1、根据key生成hash值(hashCode方法)
2、根据生成的hash值,通过hash算法得到数组下标
i = (n -1)&hash
3、调用key的equals方法,和数组中对应的链表的每一个节点进行比较
4、如果不存在,就添加进去,如果存在,就不添加
java8开始,引入了红黑树,如果链表个数大于等于9,就把链表转型为红黑树,从而加快查询效率
覆写equals的时候还需考虑hashCode
因为需要使用hashCode和equals共同表示对象的唯一性