Android使用Collections.sort()对List<T>进行排序

一、想到排序大家肯定会想到什么冒泡排序这些基本算法,但是这个用起来不是那么的方便简单,今天给大家介绍一个java类,Collections。这个一个非常使用的数据结构。

二、在Collections中,有Collections.sort方法:看源码:

public static <T> void sort(List<T> list, Comparator<? super T> c) {
        // BEGIN Android-changed: Compat behavior for apps targeting APIs <= 25.
        // list.sort(c);
        int targetSdkVersion = VMRuntime.getRuntime().getTargetSdkVersion();
        if (targetSdkVersion > 25) {
            list.sort(c);
        } else {
            // Compatibility behavior for API <= 25. http://b/33482884
            if (list.getClass() == ArrayList.class) {
                Arrays.sort((T[]) ((ArrayList) list).elementData, 0, list.size(), c);
                return;
            }

            Object[] a = list.toArray();
            Arrays.sort(a, (Comparator) c);
            ListIterator<T> i = list.listIterator();
            for (int j = 0; j < a.length; j++) {
                i.next();
                i.set((T) a[j]);
            }
        }
        // END Android-changed: Compat behavior for apps targeting APIs <= 25.
    }

在方法中需要传递两个参数:list,和一个比较器Comparator,在使用过程中,new Comparator时会实现compare方法,具体使用方法如下:
1、现在对一个对象进行排序,bean类为:

public class StockMarket {

    private List<RowsBean> rows;

    public List<RowsBean> getRows() {
        return rows;
    }

    public void setRows(List<RowsBean> rows) {
        this.rows = rows;
    }

    public static class RowsBean {
        /**
         * gpcode : 600050
         * lastprice : 5.42
         * name : 涓浗鑱旈€�
         * newprice : 5.34
         * rate : -1.4760147601476028
         */

        private String gpcode;
        private double lastprice;
        private String name;
        private double newprice;
        private double rate;
        private int stoptrade;

        public int getStoptrade() {
            return stoptrade;
        }

        public void setStoptrade(int stoptrade) {
            this.stoptrade = stoptrade;
        }

        public String getGpcode() {
            return gpcode;
        }

        public void setGpcode(String gpcode) {
            this.gpcode = gpcode;
        }

        public double getLastprice() {
            return lastprice;
        }

        public void setLastprice(double lastprice) {
            this.lastprice = lastprice;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public double getNewprice() {
            return newprice;
        }

        public void setNewprice(double newprice) {
            this.newprice = newprice;
        }

        public double getRate() {
            return rate;
        }

        public void setRate(double rate) {
            this.rate = rate;
        }
    }
}

2、我们需要对该bean类中的newprice进行,升序和倒序排序,先是倒序排序,使用的o2.xx-o1.xx,这样获得的List就是倒序排序后的列表了:

public List<StockMarket.RowsBean> getLastPriceDescList(List<StockMarket.RowsBean> list) {
        Collections.sort(list, new Comparator<StockMarket.RowsBean>() {
            @Override
            public int compare(StockMarket.RowsBean o1, StockMarket.RowsBean o2) {

                return Double.valueOf(o2.getNewprice()).compareTo(Double.valueOf(o1.getNewprice()));
            }
        });
        return list;
    }

3、升序排序,使用o1.xxx-o2.xxx排序获得升序列表:

 public List<StockMarket.RowsBean> getLastPriceASCList(List<StockMarket.RowsBean> list) {
        Collections.sort(list, new Comparator<StockMarket.RowsBean>() {
            @Override
            public int compare(StockMarket.RowsBean o1, StockMarket.RowsBean o2) {

                return Double.valueOf(o1.getNewprice()).compareTo(Double.valueOf(o2.getNewprice()));
            }
        });
        return list;
    }

4、这里要注意的是,假如你要排序的数据类型是double的话,就像我这个例子中的,那么在Comparator中的返回值是int,如果你直接把你的double强制转换成int,然后将这返回这两个int值的差的话,那么,你的排序将会出问题,你的double被强转了,此时就应该用 Double.valueOf()来转换int,然后用compareTo进行比较,这样就不会出问题了,如果你本身就是int数据类型,直接作差比较就好了。en,就酱紫!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`Collections.sort()`是Java中的一个静态方法,用于对集合进行排序。在Android中,你可以使用它对`List`或`ArrayList`等集合进行排序。 以下是使用`Collections.sort()`方法对一个`List`进行排序的示例代码: ```java List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("orange"); Collections.sort(list); System.out.println(list); // 输出 [apple, banana, orange] ``` 这个示例代码中,我们首先创建了一个`List`并添加了一些元素,然后调用`Collections.sort(list)`方法对`List`进行排序,最后输出排序后的`List`。 `Collections.sort()`方法默认按照元素的自然顺序进行排序。如果要对自定义的对象进行排序,需要实现`Comparable`接口并重写`compareTo()`方法。例如: ```java class Person implements Comparable<Person> { private String name; private int age; // 构造方法、getter和setter省略 @Override public int compareTo(Person o) { return this.age - o.age; // 按照年龄升序排序 } } List<Person> list = new ArrayList<>(); list.add(new Person("Alice", 25)); list.add(new Person("Bob", 30)); list.add(new Person("Charlie", 20)); Collections.sort(list); System.out.println(list); // 输出 [Charlie, Alice, Bob] ``` 在这个示例代码中,我们定义了一个`Person`类,并实现了`Comparable`接口。`compareTo()`方法比较两个`Person`对象的年龄,返回值为负数表示当前对象小于传入的对象,返回值为正数表示当前对象大于传入的对象,返回值为0表示两个对象相等。然后我们创建了一个`List`并添加了一些`Person`对象,最后调用`Collections.sort(list)`方法按照年龄排序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值