java比较器(二) *** 作对象数组排序

java比较器(二) *** 作对象数组排序,第1张

java比较器(二) *** 作对象数组排序

在java中有提供java.util.Arrays类 *** 作数组类型,并封装好了

static void sort(数据类型[] a)方法。

以下图为例:

//使用Array实现对象数组排序
public class ArraysDemo {
    public static void main(String[] args) {
        int[] temp = new int[]{17, 28, 57425, 5, 4, 28, 4};
        Arrays.sort(temp);//对int型数组进行排序
        System.out.println(Arrays.toString(temp));//输出int型数组排序后的结果
        String[] tempStr = new String[]{"17", "28", "adfa", "cc", "af", "28adf", "4"};
        Arrays.sort(tempStr);//对String型数组进行排序
        System.out.println(Arrays.toString(tempStr));//输出String型数组排序后的结果

    }
}

此为上述代码执行结果:

[4, 4, 5, 17, 28, 28, 57425]
[17, 28, 28adf, 4, adfa, af, cc]

此方法如果正常传入 String 和引用类型数据时。是可以正常执行。

下面我们创建一个Book类对象做对象数据测试:

class Book {
    private String title;
    private double price;

    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "title='" + title + ''' +
                ", price=" + price +
                '}' + "n";
    }
}

编写测试用例 

public class ArraysDemo {
    public static void main(String[] args) {
        Book book []=new Book[]{
                new Book("Java开发",123.12),
                new Book("C#开发",12.12),
                new Book("Jsp开发",23.12),
                new Book("Js发",523.12)
        };//创建Book对象数组;
        Arrays.sort(book);//对象数组排序
        System.out.println(Arrays.toString(book));
    }
}

需要注意的是,以上代码无编译错误,但在运行后却出现了下列异常信息。 

Exception in thread "main" java.lang.ClassCastException: cn.test.demo.Book cannot be cast to java.lang.Comparable
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
    at java.util.Arrays.sort(Arrays.java:1246)
    at cn.test.demo.ArraysDemo.main(ArraysDemo.java:49)

 这种情况其实在java API文档中也提到过,对象数组要实现排序的话,对象所在的类一定要实现Comparable接口,覆写其中的compareTo()方法进行排序 *** 作。

懂得问题产生的原因后的完整代码如下:

package cn.test.demo;

import java.util.Arrays;

//Book对象数组如果要进行排序 必须要实现Comparable接口,覆写compareTo方法,泛型类型接收本类对象
class Book implements Comparable {
    private String title;
    private double price;

    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "title='" + title + ''' +
                ", price=" + price +
                '}' + "n";
    }

    //覆写Conparable接口的方法,定义在Book对象中要以哪个属性进行排序
    @Override
    public int compareTo(Book o) {
        if (this.price > o.price) {
            return -1;
        } else if (this.price < o.price) {
            return 1;
        } else {
            return 0;
        }
    }
}

//使用Array实现对象数组排序
public class ArraysDemo {
    public static void main(String[] args) {
        Book book[] = new Book[]{
                new Book("Java开发", 123.12),
                new Book("C#开发", 12.12),
                new Book("Jsp开发", 23.12),
                new Book("Js发", 523.12)
        };//创建Book对象数组;
        Arrays.sort(book);//对象数组排序
        System.out.println(Arrays.toString(book));
    }
}

程序运行结果: 

[Book{title='Js发', price=523.12}
, Book{title='Java开发', price=123.12}
, Book{title='Jsp开发', price=23.12}
, Book{title='C#开发', price=12.12}
]

日常记录自学的内容,大神勿喷! 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5709918.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存