Collection TreeSet TreeMap排序 ArrayList HashSet去重之间的区别

Collections.sort()方法 可以对保存对象的ArrayList集合进行排序 但是必须实现Comparable 中的compareTo(o1,o2)或者Comparator 中的compareTo(o1)方法,必须定义规则 否则系统不知道该怎么排序.

TreeMap集合有排序功能,如果键(key)是字符串,则自己无法更改输出顺序,只能按照系统定义的字符串排序方法来输出,String类有final修饰,(public final class String)是类不是接口,不能通过实现它,从而实现里面的compareTo方法,有final修饰String类,又不能通过继承它来重写里面的compareTo()方法,所有只能遵循系统默认的排序方式.

ArrayList中添加对象,实现去重功能,用的是contains方法,而contains方法中又依赖equals方法,所有要通过重写equals方法来实现去重功能

HashSet实现去重,要先比较hashCode码,如果hashCode码不同,则认为是不同的对象,直接添加进去,不再使用equals方法;
所以对象去重时,要重写hashCode方法,可以使此方法的返回值全部都相同(-1,0,1,2,3都可以),这时所有对象都会进去equals方法中一一比较,
也可以使内容相同的对象返回相同的hashCode码,这样相同hashCode码就会进去equals方法中比较,hashCode码不同,则会直接添加进集合中,不再调用equals方法,从而减少equals方法调用的次数
在hashCode码相同的情况下,为了进一步区分,会去equals()方法中比较,而equals()方法中比较的也是地址,hashCode相同,equals比较地址的时候,地址不同,会返回false,所以会全部添加进去,重写equals方法时候,如果里面只有一句话,返回:return true,这时只会添加一个对象进去,因为这时系统认为所有对象地址都一样;所以返回的是应该是对象中的内容的比较情况,根据实际情况决定返回是true还是false

TreeSet中当实现Comparator或者Comparable时,重写里面的compareTo方法,如果方法中写的(return 1),返回的是1,这时会按存进去的顺序,将结果输出来,如果方法中写的(return -1)这时会按存进去的方法,逆序输出,如果方法中返回的是0,则只会存进去第一个对象,TreeSet主要用来排序,里面一般会去除重复对象,但里面可以通过避免返回0来去除对象,可以根据比较字符串长度或者大小来进行排序

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值