首页 > 编程知识 正文

什么是usb接口,重写comparable接口

时间:2023-05-05 14:26:12 阅读:153720 作者:2966

1、使用说明 Java中的对象,正常情况下,只能进行比较:== 或者 != ,不能使用 > 或 < 的。但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现? 使用两个接口中的任何一个: Comparable 或 Comparator 2、Comparable接口的使用 自然排序 Comparable 接口的使用举例1、像String、包装类等实现了Comparable接口,重写了CompareTo(obj)方法给出了比较两个对象大小的方式2、像String、包装类重写compareTo()方法以后,进行了从小到大的排列3、重写compareTo(obj)规则: 如果当前对象this 大于 形参对象obj 则返回正整数 如果当前对象this 小于 形参对象obj 则返回负整数 如果当前对象this 等于 形参对象obj 则返回零 @Test public void testComparable() { String[] arr = new String[]{"aa", "cc", "mm", "gg", "zz", "ww", "bb"}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } 自定义类排序 4、对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法在compareTo(obj)方法中指明如何排序 package com.dzu.domain;/** * @Classname Goods * @Description TODO * @Date 2021/3/14 17:01 * @Created by ZhaoDong */public class Goods implements Comparable { private String name; private double price;/*省略……*/ //指明商品比较大小的方式;先按照价格从低到高排序,再按照产品名称从低到高 @Override public int compareTo(Object o) { System.out.println("**********"); if (o instanceof Goods) { Goods goods = (Goods) o; if (this.price > goods.price) { return 1; } else if (this.price < goods.price) { return -1; } else {// return 0; return -this.name.compareTo(goods.name); } // 方式二// return Double.compare(this.price, goods.price); } throw new RuntimeException("传入的数据类型不一致"); }} @Test public void testComparable2(){ Goods[] arr = new Goods[5]; arr[0] = new Goods("lenovo",34); arr[1] = new Goods("abc",34); arr[2] = new Goods("dell",43); arr[3] = new Goods("xiaomi",12); arr[4] = new Goods("huawei",65); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } 3、Comparator接口的使用 定制排序 1、当元素的类型没有实现Comparable接口而又不方便修改代码或者实现了Comparable接口的排序规则不合适当前的操作那么可以考虑使用Comparator2、重写compare(Object o1, Object o2)方法,比较o1和o2的大小;如果方法返回正整数,则表示o1大于o2;如果返回负整数,表示o1小于o2;如果返回0,表示相等 @Test public void testComparator() { String[] arr = new String[]{"aa", "cc", "mm", "gg", "zz", "ww", "bb"}; Arrays.sort(arr, new Comparator() { // 按照字符串从大到小的顺序排列 @Override public int compare(Object o1, Object o2) { if (o1 instanceof String && o2 instanceof String) { String s1 = (String) o1; String s2 = (String) o2; return -s1.compareTo(s2); } throw new RuntimeException("输入的数据类型不一致"); } }); System.out.println(Arrays.toString(arr)); } 自定义类的定制排序 @Test public void testComparator2() { Goods[] arr = new Goods[5]; arr[0] = new Goods("lenovo", 34); arr[1] = new Goods("abc", 34); arr[2] = new Goods("dell", 43); arr[3] = new Goods("xiaomi", 12); arr[4] = new Goods("huawei", 65); Arrays.sort(arr, new Comparator<Goods>() { //指明商品比较大小的方式;按照产品名称从低到高 再按照价格从高到低排序 @Override public int compare(Goods o1, Goods o2) { if (o1.getName().equals(o2.getName())) { return -Double.compare(o1.getPrice(), o2.getPrice()); } else { return o1.getName().compareTo(o2.getName()); } } }); System.out.println(Arrays.toString(arr)); }} 总结 Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小Comparator接口属于临时性的比较

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。