集思吧网站怎么做问卷,手机有软件做ppt下载网站有哪些内容,电子商务网站策划,seosem顾问文章目录自然排序#xff1a;java.lang.Comparable定制排序#xff1a;java.util.Comparator自然排序#xff1a;java.lang.Comparable
Comparable接口强行对实现它的每个类的对象进行整体排序#xff0c;这种排序被称为类的自然排序。
实现 Comparable 的类必须实现 com…
文章目录自然排序java.lang.Comparable定制排序java.util.Comparator自然排序java.lang.Comparable
Comparable接口强行对实现它的每个类的对象进行整体排序这种排序被称为类的自然排序。
实现 Comparable 的类必须实现 compareTo(Object obj) 方法两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。
实现Comparable接口的对象列表和数组可以通过 Collections.sort 或 Arrays.sort 进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素无需指定比较器。
像String、包装类等实现了Comparable接口重写了compareTo(obj o)方法给出了比较两个对象大小的方式。
像String、包装类重写compareTo()方法以后默认可以进行从小到大的排列。
自定义类实现Comparable接口重写compareTo(obj)的规则: 如果当前对象this大于形参对象obj则返回正整数 1 如果当前对象this小于形参对象obj,则返回负整数 -1 如果当前对象this等于形参对象obj,则返回零 0 示例
import java.util.Arrays;class Good implements Comparable{private int price;private String name;public Good(String name,int price) {this.price price;this.name name;}Override//先比较价格从低到高再比较名称按从大到小public int compareTo(Object o) {if (o instanceof Good){Good other (Good) o;if (this.price other.price) return 1;else if (this.price other.price) return -1;else return -this.name.compareTo(other.name);}throw new RuntimeException(比较的不是Good);}Overridepublic String toString() {return Good{ price price , name name \ };}
}public class ComparableTest {public static void main(String[] args) {Good[] goods new Good[5];goods[0] new Good(dell, 4668);goods[1] new Good(ipad, 2628);goods[2] new Good(dell, 688);goods[3] new Good(huawei, 3229);goods[4] new Good(xiaomi, 1688);Arrays.sort(goods);System.out.println(Arrays.toString(goods));}
}Comparable 的典型实现类(默认都是从小到大排列的) ①String按照字符串中字符的Unicode值进行比较 ②Character按照字符的Unicode值来进行比较 ③数值类型对应的包装类以及BigInteger、BigDecimal按照对应的数值大小进行比较 ④Booleantrue 对应的包装类实例大于 false 对应的包装类实例 ⑤Date、Time等后面的日期时间比前面的日期时间大 定制排序java.util.Comparator
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码或者实现了java.lang.Comparable接口的排序规则不适合当前的操作那么可以考虑使用 Comparator 的对象来排序强行对多个对象进行整体排序的比较。
重写compare(Object o1,Object o2)方法比较o1和o2的大小如果方法返回正整数则表示o1大于o2如果返回0表示相等返回负整数表示o1小于o2。
可以将 Comparator 传递给 sort 方法如 Collections.sort 或 Arrays.sort从而允许在排序顺序上实现精确控制。
还可以使用 Comparator 来控制某些数据结构如有序 set或有序映射的顺序或者为那些没有自然顺序的对象 collection 提供排序。
import java.util.Arrays;
import java.util.Comparator;class Good {private int price;private String name;public Good(String name,int price) {this.price price;this.name name;}Overridepublic String toString() {return Good{ price price , name name \ };}public int getPrice() {return price;}public String getName() {return name;}
}public class ComparableTest {public static void main(String[] args) {Good[] goods new Good[5];goods[0] new Good(dell, 668);goods[1] new Good(ipad, 928);goods[2] new Good(dell, 928);goods[3] new Good(huawei, 329);goods[4] new Good(xiaomi, 168);Arrays.sort(goods,new Comparator(){Override//先比较价格从低到高再比较名称按从大到小public int compare(Object o1, Object o2) {Good good1 (Good) o1;Good good2 (Good) o2;if (good1.getPrice() good2.getPrice()) return 1;else if (good1.getPrice() good2.getPrice()) return -1;else return good1.getName().compareTo(good2.getName());}});System.out.println(Arrays.toString(goods));}
}