Java对象排序的3种实现方法

/** * Java对象排序的3种实现方式 * @author zhangwenzhang * */public class TestObjectSort {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        /**方法1         * 使用Collections.sort(List, Comparator)实现,必须实现Comparator的一个比较器并复写compare()方法         */        Person1[] ps = new Person1[]{new Person1("p0",0),                                     new Person1("p1",3),                                     new Person1("p2",5),                                     new Person1("p3",4),                                     new Person1("p4",8),                                     new Person1("p5",6),                                     new Person1("p6",7),                                     new Person1("p7",1),                                     new Person1("p8",2),                                     new Person1("p9",9)};        List<Person1> pl = new ArrayList<Person1>();        for(int i = 0; i < 10; i++){            System.out.print(ps[i].getAge());            pl.add(ps[i]);        }        System.out.println("\n使用Collections.sort(List, Comparator)类来比较:");        long l1 = System.currentTimeMillis();        Collections.sort(pl, new MyComparator());        System.out.println("time: " + (System.currentTimeMillis() - l1));        for(Iterator it = pl.iterator(); it.hasNext();){            Person1 p = (Person1) it.next();            System.out.print(p.getAge());        }        /**方法2         * 使用Arrays.sort(Object[])实现,对象必须实现Comparable接口并复写compareTo()方法         */        Person2[] ps2 = new Person2[]{new Person2("p0",0),                                     new Person2("p1",3),                                     new Person2("p2",5),                                     new Person2("p3",4),                                     new Person2("p4",8),                                     new Person2("p5",6),                                     new Person2("p6",7),                                     new Person2("p7",1),                                     new Person2("p8",2),                                     new Person2("p9",9)};        System.out.println("\n使用Arrays.sort(Object[])类来比较:");        long l2 = System.currentTimeMillis();        Arrays.sort(ps2);        System.out.println("time: " + (System.currentTimeMillis() - l2));        for(int i = 0; i < 10; i++){            System.out.print(ps2[i].getAge());        }        /**方法3         * 使用Collections.sort(List)实现,对象必须实现Comparable接口并复写compareTo()方法         */        Person2[] ps3 = new Person2[]{new Person2("p0",0),                                     new Person2("p1",3),                                     new Person2("p2",5),                                     new Person2("p3",4),                                     new Person2("p4",8),                                     new Person2("p5",6),                                     new Person2("p6",7),                                     new Person2("p7",1),                                     new Person2("p8",2),                                     new Person2("p9",9)};        List<Person2> pl3 = new ArrayList<Person2>();        for(int i = 0; i < 10; i++){            pl3.add(ps3[i]);        }        System.out.println("\n使用Collections.sort(List)类来比较:");        Collections.sort(pl3);        for(Iterator it = pl3.iterator(); it.hasNext();){            Person2 p = (Person2) it.next();            System.out.print(p.getAge());        }    }}/** * 方法1需要 * @author zhangwenzhang * */class MyComparator implements Comparator{    public int compare(Object o1, Object o2){        Person1 p1 = (Person1)o1;        Person1 p2 = (Person1)o2;        if(p1.getAge() < p2.getAge()){            return -1;        }else if(p1.getAge() == p2.getAge()){            return 0;        }else{            return 1;        }    }}/** * 方法1需要 * @author zhangwenzhang * */class Person1{    private String name;    private int age;    public Person1(){}    public Person1(String name, int age) {        super();        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}/** * 方法2,3需要 * @author zhangwenzhang * */class Person2 implements Comparable{    private String name;    private int age;    public Person2(){}    public Person2(String name, int age) {        super();        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public int compareTo(Object o){        Person2 p = (Person2)o;        if(this.age < p.age){            return -1;        }else if(this.age == p.age){            return 0;        }else{            return 1;        }    }}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索华为p7
, new
, 方法
, system
, collections.sort
, public
, name
, new person
, age
, person
, collections.sort排序
collections.sort方法
java 对象排序、java list 对象 排序、java实现快速排序、java实现冒泡排序、java实现快速排序算法,以便于您获取更多的相关知识。

时间: 2024-11-01 23:26:29

Java对象排序的3种实现方法的相关文章

用java实现云计算的两种趋势性方法

本文讲的是用java实现云计算的两种趋势性方法,[IT168 资讯]最近,人们在思考如何使用Java来实现云计算,我看到了两种趋势性的方法.它们存在交叉重叠处而并非互相排斥,但总体而言它们在项目方面有着非常不同的表现: 重面向UI(Heavy UI oriented) 这种类型的应用或框架通常提供基于UI的控制台.管理应用.插件等,这为管理云中的资源比如开始和停止图像等提供了唯一的方法.这种方法的关键特征是它需要大量用户的输入和人的干预,所以这变得相对不动态.不随需而变.最好的例子是:Right

Java线程池的几种实现方法和区别介绍_java

Java线程池的几种实现方法和区别介绍 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.E

Java线程池的几种实现方法及常见问题解答_java

工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能.所以,"池"的用处就凸显出来了. 1. 为什么要使用线程池 在3.6.1节介绍的实现方式中,对每个客户都分配一个新的工作线程.当工作线程与客户通信结束,这个线程就被销毁.这种实现方式有以下不足之处: •服务器创建和销毁工作的开销( 包括所花费的时间和系统资源 )很大.这一项不用解释,可以

Java数据库连接池的几种配置方法(以MySQL数据库为例)_java

一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1.方法一:在WebRoot下面建文件夹META-INF,里面建一个文件context.xml,如下: <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/chaoshi" auth="

Java对List进行排序的两种实现方法_java

前言 Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序. 学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,如果姓名相同则按年龄升序排序. 第一种:实体类自己实现比较 (实现comparable接口:public interface Comparable<T> ,里面就一个方法声明:public int compareTo(T o); ) 示例代码: publ

Java对象排序、中文排序、SortedSet排序使用和源码讲解

在C.C++中有很多排序算法,但是通常排序算法不得不让程序员在写代码的过程中陷入对底层很多指针和位置的理解,java不希望这样,所以排序大多可以由java帮你做掉,例如,你要对一个数组排序,就通过:Collections.sort(list)那么这个list就被排序了,排序最终调用的是Arrays.sort方法来完成的,所以数组自然是用Arrays.sort了,而SortedSet里面内部也有排序功能也是类似的方式的来实现的,只是内部调用了相关的方法来完成而已:SortedSet只是一个接口,实

Java动态代理的两种实现方法

AOP的拦截功能是由java中的动态代理来实现的.说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行.不同的切入时机对应不同的Interceptor的种类,如BeforeAdviseInterceptor,AfterAdviseInterceptor以及ThrowsAdviseInterceptor等).面向切面变成的重点实现就是使用动态代理的方式. 那么动态代理是如何实现将切面逻辑(advis

Excel表格排序的三种实用方法

步骤/方法 一.数值排序 1.RANK函数 RANK函数是Excel计算序数的主要工具,它的语法为:RANK(number,ref,order),其中number为参与计算的数字或含有数字的单元格,ref是对参与计算的数字单元格区域的绝对引用,order是用来说明排序方式的数字(如果order为零或省略,则以降序方式给出结果,反之按升序方式). 例如要计算E2.E3.E4单元格存放一季度的总产值,计算各车间产值排名的方法是:在F2单元格内输入公式 "=RANK(E2,$E$2:$E$4)&quo

Java中Decorate的三种实现方法

每一位读过GoF的那本著名的设计模式一书的人都会知道Decorator模式.现在,让我们暂时忘记所了解的Decorator概念,尝试着从我们的开发经验中去理解Decorator模式吧. Decorator是用于装饰一个事物(或人)的另一个事物(或人).一个Decorator直接改变被装饰对象的职责或特征,但是不能改变被装饰对象的自有属性.例如:一个镜框可以装饰图片,化妆品可以装饰女孩的脸等等. 从我们的专业角度来讨论一些存在的实例: 1 JScrollPane可以装饰JComponent的视图部