zoukankan      html  css  js  c++  java
  • java list排序

    1、简介

      这个和数组的排序又不一样了。

      其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort对于List和Vector而言,你可以使用Collections.sort方法

      Java API针对集合类型的排序提供了2个方法:

    java.util.Collections.sort(java.util.List)
    
    java.util.Collections.sort(java.util.List, java.util.Comparator)

      如果集合里面的元素都是相同类型的,并且实现了Comparable接口,那么可以直接调用第一个方法。

      如果你有其它的排序的想法,比如你不想按照自然排序进行,还可以传一个Comparator过去,比如反向。

      元素不相同的情况比较复杂,可以暂时不用考虑。

    2、通过实现Comparable接口来实现list的排序

      假如现在我们有一个Person类的list集合,要让其按照一个Order属性进行排序,我们可以让Person类实现Comparable接口,重写其CompareTo方法即可。具体实现如下:

    1)、Person实体类

    public class Person implements Comparable<Person> {
        private String name;
        private Integer order;
     
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
     
        /**
         * @param name
         *            the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
     
        /**
         * @return the order
         */
        public Integer getOrder() {
            return order;
        }
     
        /**
         * @param order
         *            the order to set
         */
        public void setOrder(Integer order) {
            this.order = order;
        }
     
    @Override
    public int compareTo(Person arg0) { return this.getOrder().compareTo(arg0.getOrder()); //这里定义你排序的规则。 } }

       通过重写Comparable接口的compareTo方法,可以让程序按照我们想要的排列方式进行排序,如:这里我让Person按照order属性升序排序。

    2)、测试类

    public static void main(String[] args) {
        //初始化数据
        List<Person> listA = new ArrayList<Person>();
        Person p1 = new Person();
        Person p2 = new Person();
        Person p3 = new Person();
     
        p1.setName("name1");
        p1.setOrder(1);
        p2.setName("name2");
        p2.setOrder(2);
        p3.setName("name3");
        p3.setOrder(3);
     
        listA.add(p2);
        listA.add(p1);
        listA.add(p3);
    
        //排序
        Collections.sort(listA);
    
        //打印排序后的Person
        for (Person p : listA) {
            System.out.println(p.getName());
        }
    }

    3)、结果:

    name1
    name2
    name3

    3、通过重载Collections.sort方法

      直接重载java.util.Collections.sort(java.util.List, java.util.Comparator) 方法。可以灵活的修改我们排序的方式,具体实现如下:

    1)、Person实体类

      和上面的类相同,但没实现Comparable接口

    public class Person {
        private String name;
        private Integer order;
     
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
     
        /**
         * @param name
         *            the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
     
        /**
         * @return the order
         */
        public Integer getOrder() {
            return order;
        }
     
        /**
         * @param order
         *            the order to set
         */
        public void setOrder(Integer order) {
            this.order = order;
        }
     
    }

    2)、测试类

    public static void main(String[] args) {
            List<Person> listA = new ArrayList<Person>();
            Person p1 = new Person();
            Person p2 = new Person();
            Person p3 = new Person();
     
            p1.setName("name1");
            p1.setOrder(1);
            p2.setName("name2");
            p2.setOrder(2);
            p3.setName("name3");
            p3.setOrder(3);
     
            listA.add(p2);
            listA.add(p1);
            listA.add(p3);
             
            //直接在这里添加我们的排序规则
            Collections.sort(listA, new Comparator<Person>() {
                public int compare(Person arg0, Person arg1) {
                    return arg0.getOrder().compareTo(arg1.getOrder());
                }
            });
             
            for (Person p : listA) {
                System.out.println(p.getName());
            }
        }

      从上面看到,直接在Conllections.sort()方法中重写了一个Comparator接口,可以在不同的地方使用Person集合的不同排序方法。如上面还是按照Person的order属性升序排列,我只要改写该方法,就可以在其他地方按照其他的规则对我的list集合进行排序,但是这样子代码看起来会比前面的那种方式繁琐。

    3)、结果

    name1
    name2
    name3

      致谢:感谢您的阅读!

  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/0201zcr/p/5395639.html
Copyright © 2011-2022 走看看