`
jbgtwang
  • 浏览: 21507 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java集合中对象某属性比较排序Comparable与Comparator

阅读更多

要对集合中的对象的某属性进行排序有两种方式。

a. 一种是要排序对象类实现comparable接口的compareTo方法;然后把对象放入list;然后调用Collections.sort(list);
b. 一种是不对要排序对象类做任何改动,创建Comparator接口的实现类C;然后 把对象放入list;然后调用Collections.sort(list, C);

 

a.eg

----------------------------------

public class User implements Comparable<User>{
    private String name;
    private int age;
    private int gender;
    private String address;
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the gender
     */
    public int getGender() {
        return gender;
    }
    /**
     * @param gender the gender to set
     */
    public void setGender(int gender) {
        this.gender = gender;
    }
    /**
     * @return the address
     */
    public String getAddress() {
        return address;
    }
    /**
     * @param address the address to set
     */
    public void setAddress(String address) {
        this.address = address;
    }
    /**
     *
     */
    public User() {
        super();
    }
    /**
     * @param name
     * @param age
     * @param gender
     * @param address
     */
    public User(String name, int age, int gender, String address) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.address = address;
    }

    @Override
    public int compareTo(User o) {
        if(o!=null){
            if(this.getAge()>o.getAge()){

               return 1;
            }else if(this.getAge()==o.getAge()){

               return 0;

            }

       }
        return -1;
    }
}

-------------------------------------------main

List<User> ulist = new ArrayList<User>();
ulist.add(new User("wangbo",29,1,"长沙"));
ulist.add(new User("wumei",44,1,"株洲"));
ulist.add(new User("zhangjie",19,1,"岳阳"));
ulist.add(new User("lihua",36,1,"长沙"));
ulist.add(new User("zhangchangzhe",19,1,"衡阳"));

Collections.sort(list);

for(User u:ulist){
            System.out.println(u.getName()+"\t"+u.getAge()+"\t"+u.getAddress());
}

 

==============================================

b.eg

--------------------------------

public class User {
    private String name;
    private int age;
    private int gender;
    private String address;
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the gender
     */
    public int getGender() {
        return gender;
    }
    /**
     * @param gender the gender to set
     */
    public void setGender(int gender) {
        this.gender = gender;
    }
    /**
     * @return the address
     */
    public String getAddress() {
        return address;
    }
    /**
     * @param address the address to set
     */
    public void setAddress(String address) {
        this.address = address;
    }
    /**
     *
     */
    public User() {
        super();
    }
    /**
     * @param name
     * @param age
     * @param gender
     * @param address
     */
    public User(String name, int age, int gender, String address) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.address = address;
    }
    
}

 

------------------------------

import java.util.Comparator;

public class ComparatorImpl implements Comparator<User>{

    @Override
    public int compare(User o1, User o2) {
        
        if(null!=o1 && null!=o2){
            if(o1.getAge() >o2.getAge()){
                return 1;
            }else if(o1.getAge() ==o2.getAge()){
                return 0;
            }
        }
        return -1;
    }

}

-----------------------------------main

List<User> ulist = new ArrayList<User>();
        ulist.add(new User("wangbo",29,1,"长沙"));
        ulist.add(new User("wumei",44,1,"株洲"));
        ulist.add(new User("zhangjie",19,1,"岳阳"));
        ulist.add(new User("lihua",36,1,"长沙"));
        ulist.add(new User("zhangchangzhe",19,1,"衡阳"));
        Collections.sort(ulist, new ComparatorImpl());
        for(User u:ulist){
            System.out.println(u.getName()+"\t"+u.getAge()+"\t"+u.getAddress());
        }

 

转自:http://blog.csdn.net/jbgtwang/article/details/6952459

分享到:
评论

相关推荐

    JAVA集合的使用(List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类、equals、hashCode)

    要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode

    java集合类演示源码

    实现Comparable接口或Comparator接口,用户可以根据需要对集合中的元素进行排序。为了方便用户使用,Java平台还提供了Collections和Arrays工具类。collection.rar分别对上述内容进行详细讲解演示。

    Java 集合方面的面试题

    Java 中集合框架的主要接口是什么? ArrayList 和 LinkedList 有什么区别? HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何...

    Java基础知识点.html

    哈希值 LinkedHashSet TreeSet 自然排序Comparable 比较器排序Comparator Set集合 并发修改异常 LinkedList集合 ArrayList集合 List集合 Collection集合概述 冒泡排序 Object 异常 Math 包装类 Calendar类 ...

    Comparable接口和Comparator接口的比较

    此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。 此 接口只有一个方法compareTo,比较此对象与指定对象的顺序,如果该对象小 于、等于或大于指定对象,则分别返回负整数、零或正...

    java Lucene 中自定义排序的实现

    Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...

    java集合详解与总结

    排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 ...

    java常用工具类的使用

    在Java开发类库中,提供了很多工具类,我们即将学习最常见的工具类,比如对日期的操作,对集合的操作等。具体更多的工具类,请参考JavaDoc文档。 2. java.util.Date类 Date类包装了毫秒值,毫秒值表示自1970年1月1...

    Java开发详解.zip

    031113_【第11章:Java常用类库】_比较器(Comparable、Comparator)笔记.pdf 031114_【第11章:Java常用类库】_观察者设计模式笔记.pdf 031115_【第11章:Java常用类库】_正则表达式笔记.pdf 031116_【第11章:Java...

    11集合.rarjava 集合类

    java 集合类的排序主要是用Collections.sort方法,Collections和Collection是不一样的,前者是类,后者是接口,在这里,我主要是想说明它的sort方法的几种类型, 提示:实现接口的方法时,只需要比较两个数,大的返回1,...

    AIC的Java课程1-6章

     知道实现比较器(Comparable,Comparator)用于排序算法(多态性)。  [*]了解同步包装和不可修改包装。 第12章 IO与串行化 2课时  了解Java IO 中类的层次结构,介绍Java IO采用的装饰...

    Java服务器端开发面试.doc

    何时栈上创建,传递变量时候的按值传 递 Comparable 接口,Comparator类,用来做比较,主要是用于集合中,排序,插入等等 类初始化,变量初始化,静态变量,静态区,常量区等等 继承多态需要知道的有super, this, ...

    Guava 16.0 API (CHM格式)

    排序: Guava 强大的 "fluent Comparator"比较器, 提供多关键字排序。  5. Throwable类: 简化了异常检查和错误传播。  二. 集合类:集合类库是 Guava 对 JDK 集合类的扩展, 这是 Guava 项目最完善和为人所知...

    Java学习笔记-个人整理的

    {13.8}java.util.Date与java.sql.Date比较}{200}{section.13.8} {13.9}Meta Data}{201}{section.13.9} {13.10}可滚动结果集}{201}{section.13.10} {13.11}Procedure}{201}{section.13.11} {14}xml}{204}{...

    algorithm-art

    还有一个后缀,表示它是处理简单数据('Smpl')还是使用 Comparable 接口('Cpbl')或 Comparator 接口('Cptr')。 测试 每个算法通常有几个测试,它们证明排序输出的正确性,并且(对我个人而言)是显示优化行为...

Global site tag (gtag.js) - Google Analytics