JAVA--比较器、set、map、散列

两种比较器:
 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共同表示对象的唯一性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值