Java如何让自定义类型具有可比较大小的能力

您所在的位置:网站首页 java接口方法有返回值吗 Java如何让自定义类型具有可比较大小的能力

Java如何让自定义类型具有可比较大小的能力

2023-04-01 19:12| 来源: 网络整理| 查看: 265

自定义类型大小比较 一、背景二、两种方法方式一,自然排序:方式二,定制排序:

一、背景 Java中基本数据类型之间可以使用比较运算符>、=、 } public Book(int price, String bookName, String author) { this.price = price; this.bookName = bookName; this.author = author; } @Override public int compareTo(Book o) { // return this.price-o.price; // 升序 return o.price-this.price; // 降序 } } // 自定义类实现Comparable接口,并重写其compareTo方法; // 按照Book类的price属性大小由高到低进行排序 @Test public void comparableTest(){ Book book1 = new Book(99, "《叶惠美》", "周杰伦"); Book book2 = new Book(88, "《Jay》", "周杰伦"); Book book3 = new Book(111, "《魔杰座》", "周杰伦"); // System.out.println(book1.compareTo(book2)); // System.out.println(book1.compareTo(book3)); Book[] books=new Book[]{book1,book2,book3}; System.out.println("排序前:"+Arrays.toString(books)); Arrays.sort(books); System.out.println("排序后:"+Arrays.toString(books)); } 排序前:[Book(price=99, bookName=《叶惠美》, author=周杰伦), Book(price=88, bookName=《Jay》, author=周杰伦), Book(price=111, bookName=《魔杰座》, author=周杰伦)] 排序后:[Book(price=111, bookName=《魔杰座》, author=周杰伦), Book(price=99, bookName=《叶惠美》, author=周杰伦), Book(price=88, bookName=《Jay》, author=周杰伦)] 方式二,定制排序: 有些类可能存在以下这些情况,此时需要用到定制排序:1)类内部并未实现java.lang.Comparable接口,且对其内部代码又不方便进行修改;2)类虽然实现java.lang.Comparable接口,具备比较大小的能力,但是当前排序方式不满足显示需求,则需要对其排序方式进行修改;定制排序,需要实现一个具体比较类实现java.util.Comparator接口,并重写其compare方法,使用前必须具有该比较类实例化对象;

此实现方式要求自定义类进行比较之前,必须获取到一个对应该类的比较类对象,此时该自定义类临时具备特定方式的比较能力。 在这里插入图片描述

// Book对应比较器:实现Comparator接口,并重写其compare方法; class BookComparator implements Comparator{ @Override public int compare(Book o1, Book o2) { return o1.getPrice()-o2.getPrice(); // 升序 } } @Test public void comparatorTest(){ Book book1 = new Book(99, "《叶惠美》", "周杰伦"); Book book2 = new Book(88, "《Jay》", "周杰伦"); Book book3 = new Book(111, "《魔杰座》", "周杰伦"); // 获取该类对应比较器对象 BookComparator comparator = new BookComparator(); // System.out.println(comparator.compare(book1,book2)); // System.out.println(comparator.compare(book1,book3)); Book[] books=new Book[]{book1,book2,book3}; System.out.println("排序前:"+Arrays.toString(books)); Arrays.sort(books,comparator); System.out.println("排序后:"+Arrays.toString(books)); } 排序前:[Book(price=99, bookName=《叶惠美》, author=周杰伦), Book(price=88, bookName=《Jay》, author=周杰伦), Book(price=111, bookName=《魔杰座》, author=周杰伦)] 排序后:[Book(price=88, bookName=《Jay》, author=周杰伦), Book(price=99, bookName=《叶惠美》, author=周杰伦), Book(price=111, bookName=《魔杰座》, author=周杰伦)]

在平时使用时,我们很少单独创建一个比较器类,比如BookComparator,而是在类似Arrays.sort方法的参数中直接传入参数,使用匿名子类的方式,示例如下:

Arrays.sort(books, new Comparator() { @Override public int compare(Book o1, Book o2) { return o1.getPrice()-o2.getPrice(); } });

资料来源:尚硅谷



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3