比较器Comparable、Comparator
Comparable接口的使用(自然排序)
1.String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式. String、包装类重写了compareTo()方法以后,进行了从小到大的排序。
2.重写compareTo(obj)规则:
如果当前对象this大于形参对象obj,则返回正整数。
如果当前对象this小于形参对象obj,则返回负整数。
如果当前对象this等于形参对象obj,则返回0
3.对于自定义类,如果需要排序,让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | public class Goods implements Comparable<Goods>{ private String name; private double price; public Goods(String name, double price) { this .name = name; this .price = price; } public String getName() { return name; } public void setName(String name) { this .name = name; } public double getPrice() { return price; } public void setPrice( double price) { this .price = price; } @Override public String toString() { return "Goods{" + "name='" + name + '\ '' + ", price=" + price + '}' ; } //按照价格从低到高排序,再按照产品名称从高到底排序 @Override public int compareTo(Goods o) { //方式一 if ( this .price>o.price){ return 1 ; } else if ( this .price<o.price){ return - 1 ; } else { //return 0;<br> return -this.name.compareTo(o.name); } //方式二 //return Double.compare(this.price,o.price); } } |
1 2 3 4 5 6 7 8 9 10 11 12 | @Test public void test1(){ Goods[] arr = new Goods[ 4 ]; arr[ 0 ] = new Goods( "bbb" , 35 ); arr[ 1 ]= new Goods( "eee" , 15 ); arr[ 2 ]= new Goods( "ddd" , 55 ); arr[ 3 ]= new Goods( "aaa" , 25 ); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); //[Goods{name='eee', price=15.0}, Goods{name='aaa', price=25.0}, Goods{name='bbb', price=35.0}, Goods{name='ddd', price=55.0}] } |
Comparator定制排序
重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
o1>o2:方法返回正整数。
o1<o2:方法返回负整数
o1=o2:方法返回0
可以将Comparator传递给sort方法,如Collections.sort或Arrays.sort,从而允许在排序顺序上实现精确控制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class ComparaTest { @Test public void test1(){ Goods[] arr = new Goods[ 4 ]; arr[ 0 ] = new Goods( "bbb" , 35 ); arr[ 1 ]= new Goods( "eee" , 15 ); arr[ 2 ]= new Goods( "ddd" , 55 ); arr[ 3 ]= new Goods( "aaa" , 25 ); //价格从高到底排序 Arrays.sort(arr, new Comparator<Goods>() { @Override public int compare(Goods o1, Goods o2) { return -Double.compare(o1.getPrice(),o2.getPrice()); } }); System.out.println(Arrays.toString(arr));<br> //[Goods{name='ddd', price=55.0}, Goods{name='bbb', price=35.0}, Goods{name='aaa', price=25.0}, Goods{name='eee', price=15.0}] } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律