`

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

 
阅读更多

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

 

Person类:

package com.flg;

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

    private String name;
    private int age;
    private boolean isAsc;//是否升序排列.true:升序, false:降序

    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 boolean isAsc() {
        return isAsc;
    }

    public void setAsc(boolean asc) {
        isAsc = asc;
    }

    /**
     * 实现Comparable接口中的compareTo方法
     * 这是对象自身与别一个对象之间的比较
     * @param o
     * @return
     */
    @Override
    public int compareTo(Object o) {
        if(isAsc()){
            return this.age-((Person)o).getAge();
        }else {
            return ((Person)o).getAge()-this.age;
        }

    }
}

 

 

MyPersonListSortTest2类:

package com.flg;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
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: 下午13:10
 * To change this template use File | Settings | File Templates.
 */
public class MyPersonListSortTest2 {

    /**
     * 获得要测试的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<Person> list,boolean isAsc){

        for(Person p:list){
                  p.setAsc(isAsc);//设置升降序排列
        }
        Collections.sort(list);

    }




    public static void main(String [] args)  {

        MyPersonListSortTest2 m = new MyPersonListSortTest2();

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

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

    }
}

 

分享到:
评论

相关推荐

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

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

    java List 排序 Collections.sort

    例如,我们有一个`Person`类,它包含了姓名和年龄属性,我们可以让它实现`Comparable`接口,比较规则为按照年龄从小到大排序: ```java public class Person implements Comparable&lt;Person&gt; { private String name...

    java 对象 排序

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

    arrayList排序

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

    collection接口的静态方法

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

    联系人排序功能的实现

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

    java 排序 完成收录

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

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

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

    java学号姓名成绩排序

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

    整合了所有java经典面试题

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

    Java面经.适用于校招

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

    java中List对象排序通用方法

    这个方法可以直接对实现了Comparable接口的List进行排序,它根据元素的自然顺序进行排序。但是,当List中的元素是自定义对象且需要按照对象的某个属性进行排序时,就需要自定义比较器Comparator。 描述中提到的问题...

    26英文字母排序

    在编程语言中,我们可以使用内置的排序函数或者自定义排序算法来实现这一过程。 在Python中,可以使用内置的`sorted()`函数或列表的`sort()`方法对包含字母的字符串或列表进行排序。例如,如果有一个包含所有26个...

    排序排序 array to object?? attachment

    在文件列表中,“JAVA排序汇总.doc”是一个文档文件,很可能包含了对Java中各种排序算法的详细解释、示例代码以及可能的性能分析。Java作为面向对象的语言,其内置的`Collections.sort()`和`Arrays.sort()`方法提供...

    java中LinkedList任意排序实例

    在Java编程中,LinkedList是一个非常重要的数据结构,它实现了List接口,允许我们在列表的任何位置进行插入和删除操作。LinkedList内部使用双向链表实现,因此它的遍历速度比ArrayList快,但随机访问性能较差。本...

    JAVA经典教材笔记

    - 泛型算法:Collections.sort(List)等。 #### 第十一章:Java常用类库 - **StringBuffer类** - StringBuffer类的特点:线程安全的可变字符序列。 - StringBuffer类的常用方法:append、insert等。 - **Runtime...

    Java面试题以及答案

    - **排序实现**:可以使用上述提到的各种排序算法。 - **序列化方法**: - 实现`Serializable`接口,利用`ObjectOutputStream`和`ObjectInputStream`进行序列化。 - 使用`Externalizable`接口,实现`writeExternal...

    java面试题总结

    - **比较接口**:实现`Comparable`接口或使用`Comparator`。 #### 12. JSP中动态INCLUDE与静态INCLUDE的区别 - **动态INCLUDE**:使用`&lt;jsp:include&gt;`标签,可以传递参数。 - **静态INCLUDE**:使用`...

    fp-tree java源码

    在Java中实现FP-Tree算法,首先需要定义`TreeNode`类,它包含项目名称、计数、父节点以及指向同名节点的链表等属性。此外,还需设计用于构建和遍历FP-Tree的方法。 ```java public class TreeNode implements ...

Global site tag (gtag.js) - Google Analytics