栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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}
]

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713268.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号