Comparable和Comparator的区别
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
相同點(diǎn):
Comparable和Comparator都是接口,用來做對象的比較而達(dá)到排序的目的。
不同點(diǎn):
Comparable需要類本身實(shí)現(xiàn)它,并重寫compareTo方法,參數(shù)為另外一個(gè)同類的對象,排序的時(shí)候使用Collections.sort(Collection cl),通常是在項(xiàng)目中自定義的類,特別是后期需要排序的類。
package collections;public class Person implements Comparable<Person> {private int age;private String name;public Person(String name, int age){this.name = name;this.age = age;}@Overridepublic int compareTo(Person o){return this.age-o.age;}@Override public String toString(){return name+":"+age;} }?
Person person1 = new Person("AA",17);Person person2 = new Person("BB",18);Person person3 = new Person("CC",19);List<Person> list = new ArrayList<>();list.add(person1);list.add(person2);list.add(person3);Collections.sort(list);Comparator是需要獨(dú)立的類來實(shí)現(xiàn)它,并重寫compare和equals方法,通常是用在無法繼承或者更改的類情況,使用Collections.sort(Collection cl,Comparator cp)進(jìn)行排序
Person p1 = new Person("AA",18);Person p2 = new Person("BB",17);Person p3 = new Person("CC",19);List<Person> list = new ArrayList<Person>();list.add(p1);list.add(p2);list.add(p3);Collections.sort(list,new Comparator<Person>(){@Overridepublic int compare(Person o1, Person o2){if(o1 == null || o2 == null)return 0;return o1.getAge()-o2.getAge();}});在《Effective Java》一書中,作者Joshua Bloch推薦大家在編寫自定義類的時(shí)候盡可能的考慮實(shí)現(xiàn)一下Comparable接口,一旦實(shí)現(xiàn)了Comparable接口,它就可以跟許多泛型算法以及依賴于改接口的集合實(shí)現(xiàn)進(jìn)行協(xié)作。你付出很小的努力就可以獲得非常強(qiáng)大的功能
轉(zhuǎn)載于:https://my.oschina.net/u/3049601/blog/1556226
總結(jié)
以上是生活随笔為你收集整理的Comparable和Comparator的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vivo你终于醒了 vivo官宣数字车钥
- 下一篇: 顶级IP将迎新作!华纳兄弟官宣重启《指环