`

按List中对像某属性排序算法1---实现Comparator接口

 
阅读更多

按List中Person类的age属性进行排序。

 

Person类:

package com.flg;

/**
 * Created with IntelliJ IDEA.
 * User: fuliguo
 * Date: 12-7-29
 * Time: 下午12:35
 * To change this template use File | Settings | File Templates.
 */
public class Person {

    private String name;
    private int 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;
    }


}

 

 

MyPersonListSortTest1:

package com.flg;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: fuliguo
 * Date: 12-7-29
 * Time: 下午12:34
 * To change this template use File | Settings | File Templates.
 */
public class MyPersonListSortTest1 implements Comparator {

    private boolean isAsc; //是否升序排列

    public boolean isAsc() {
        return isAsc;
    }
    //带升降顺序设置的构造参数
    public MyPersonListSortTest1(boolean asc) {
        isAsc = asc;
    }

    //无参构造函数
    public MyPersonListSortTest1(){}

    /**
     * 获得要测试的list
     * @return   list
     */
    public List getList(){

        List list  = new ArrayList<Person>() ;

        Person p1 = new Person();
        p1.setName("张三");
        p1.setAge(10);

        Person p2 = new Person();
        p2.setName("李四");
        p2.setAge(20);

        Person p3 = new Person();
        p3.setName("王五");
        p3.setAge(30);

        //打乱存放顺序
        list.add(p2);
        list.add(p1);
        list.add(p3);


        return list;

    }

    /**
     * 控制台输出遍历list对像顺序
     * @param list
     */
    public  void printList(List list){
        Person p;
        for(int i=0;i<list.size();i++){
            p = (Person)list.get(i);
            System.out.println(p.getName()+"---"+p.getAge());
        }
    }

    /**
     * 对list进行排序
     * @param list
     */
    public void listSort(List list,boolean isAsc){
        Collections.sort(list, (Comparator) new MyPersonListSortTest1(isAsc));

    }

    /**
     * 当前类实现了Comparator接口的compare方法
     * 站在第三方角度去比较其它对象
     * 是一个Comparator的角色
     * @param p1
     * @param p2
     * @return
     */
    @Override
    public int compare(Object p1, Object p2) {
        if(isAsc()){
            return ((Person)p1).getAge()-((Person)p2).getAge();
        }else {
            return ((Person)p2).getAge()-((Person)p1).getAge();
        }

    }


    public static void main(String [] args){

        MyPersonListSortTest1 m = new MyPersonListSortTest1();

        List list = m.getList();
        System.out.println("==========排序前=========");
        m.printList(list);

        m.listSort(list,false); //排序isAsc:true 升序,false:降序
        System.out.println("==========排序后=========");
        m.printList(list);

    }
}

 

分享到:
评论

相关推荐

    List中保存对象,按对象中某一属性排序【含程序源码】

    在编程领域,特别是Java或...总的来说,掌握按对象属性排序的能力是编程中一项重要的技能,这涉及到对面向对象编程的理解、列表操作以及排序算法的应用。通过实践和学习,你可以更熟练地处理各种数据结构和数据操作。

    java List 排序 Collections.sort

    在Java编程中,`List`接口是集合框架的重要组成部分,提供了有序的元素存储。当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行...

    list集合树状排序-java

    在本场景中,我们需要对List中的对象进行排序,这些对象通常包含表示层级关系的属性,如父ID、子节点列表等。 接下来,我们要解决的是“树状排序”。树状排序,或称为树形排序,是指将具有树结构的数据进行排序。在...

    java设计一个按优先数调度算法实现处理器调度的程序。

    ### Java设计一个按优先数调度算法实现处理器调度的程序 #### 实验背景与目标 本实验旨在通过Java语言实现一种基于优先数的处理器调度算法。该算法的核心在于根据进程的优先级来决定其运行顺序,优先级高的进程...

    Android按A-Z排序

    这部分可能包含了排序算法的具体实现,比如自定义的排序函数、对数据结构的操作等。具体代码的解析需要查看源码,但我们可以假设它提供了一个高效且灵活的排序机制,适应各种数据类型和场景。 6. **测试与调试**:...

    java 对象 排序

    - 例如,如果你有一个`Person`类,你可以实现`Comparable&lt;Person&gt;`接口,然后在`compareTo()`方法中比较`Person`的年龄或姓名等属性来决定排序顺序。 2. **使用Comparator接口**: - 当你不想改变类的源代码(即...

    用贪心算法实现背包问题

    但对于某些特殊类型的背包问题,如完全背包和0-1背包,贪心算法可以得到正确的结果。 在实际开发中,我们可能会遇到更复杂的情况,例如在SSH(Spring、Struts、Hibernate)框架下开发Web应用,或者涉及Android平台...

    arrayList排序

    ArrayList是Java编程语言中常用的集合类之一,它继承自AbstractList并实现了List接口。ArrayList以对象数组的形式存储数据,提供了动态增长的能力,便于增删改查操作。在处理大量数据时,排序是常见的需求,本篇文章...

    java 实现两张表的等值连接

    3. **排序**:对两个列表按`id`字段进行排序。可以使用Java的`Collections.sort()`方法,提供自定义比较器以比较`id`字段。 4. **合并**:遍历已排序的两个列表,同时比较当前元素的`id`,如果相等,则合并它们的...

    collection接口的静态方法

    如果`List`中的元素没有实现`Comparable`接口,或者你需要自定义排序规则,可以使用`Collections.sort(List&lt;T&gt; list, Comparator&lt;? super T&gt; c)`方法。此方法接受一个`Comparator`参数,`Comparator`是一个接口,...

    Java中的排序大全

    本文将深入探讨Java中各种排序算法,包括内置库函数和自定义实现,以帮助开发者更好地理解和运用这些技术。 一、内置排序方法 1. `Arrays.sort()`: 这是Java标准库提供的一个强大工具,适用于基本类型的数组(如...

    联系人排序功能的实现

    综上所述,实现联系人排序功能的关键在于理解和运用`Comparator`接口,以及有效地结合数据结构(如List)和视图展示(如ListView)。通过对这些核心概念的掌握,开发者可以灵活地处理各种数据排序需求,提升用户体验...

    A*算法Java实现

    在这个Java实现中,我们将探讨A*算法的基本原理、关键代码实现以及如何在Java环境中应用。 A*算法的核心在于它利用了一个评估函数f(n) = g(n) + h(n),其中g(n)是从起点到当前节点的实际代价,h(n)是从当前节点到...

    java 排序 完成收录

    在实际开发中,通常不建议手动实现这些排序算法,因为内置的排序方法经过优化,效率更高。但了解它们的工作原理对于理解算法和提高问题解决能力非常有帮助。 在JavaSort.html、JavaSort.java和JavaSort.pdf这三个...

    整合了所有java经典面试题

    - 插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 16. **编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出...

    Java面经.适用于校招

    - Collections.sort方法是基于Collections.sort()实现,使用TimSort算法对List进行排序。 2.12 hash算法 - Hash算法可以将任意长度的数据映射为固定长度的哈希值。 2.13 迭代器Iterator和Enumeration - Iterator和...

    JDK8排序总结

    在Java编程语言中,JDK8引入了许多新特性和改进,其中之一就是对排序算法的优化。这个"JDK8排序总结"的示例代码旨在帮助开发者深入理解Java8中的排序功能。下面我们将详细探讨这些特性及其应用。 首先,Java8在`...

    浅谈Java中常用数据结构的实现类Collection和M

    这使得TreeMap的元素总是按特定顺序排列,可以是自然排序(键的Comparable接口实现)或自定义排序(通过Comparator提供)。查找、插入和删除的速度稍慢于HashMap,但提供了有序性。 3. LinkedHashMap:...

    java学号姓名成绩排序

    3. **排序算法**: - 对成绩进行排序,可以选择使用内置的`Collections.sort()`方法,前提是`Student`类实现了`Comparable`接口,重写`compareTo()`方法,比较依据是成绩。 - 或者,可以使用`Comparator`接口...

    海难求生物品排序代码

    这里我们将讨论如何用Java编程语言实现一个海难求生物品的排序算法。 首先,我们需要定义一个`Item`类来表示每个物品。这个类应包含以下属性: 1. `name`:物品的名称。 2. `value`:物品的价值,用于衡量其重要性...

Global site tag (gtag.js) - Google Analytics