• 开发者在使用JAVA时都是如何排序的。


    本文翻译自:http://www.programcreek.com/2014/03/how-developers-sort-in-java/

    当分析大量开源JAVA工程的源码时,我发现JAVA开发者常用两种排序方式。一种是Collections或Arrays的sort()方法,另一种是似乎用有序的数据结构,比如TreeMap和TreeSet。

    使用Sort方法

    如果要排序的是一个collection, 则使用Collections的sort方法:

    // Collections.sort
    List<ObjectName> list = new ArrayList<ObjectName>();
    Collections.sort(list, new Comparator<ObjectName>() {
        public int compare(ObjectName o1, ObjectName o2) {
            return o1.toString().compareTo(o2.toString());
        }
    });

    如果是数组,使用Arrays的sort方法:

    // Arrays.sort
    ObjectName[] arr = new ObjectName[10];
    Arrays.sort(arr, new Comparator<ObjectName>() {
        public int compare(ObjectName o1, ObjectName o2) {
            return o1.toString().compareTo(o2.toString());
        }
    });

    如果已经有一个集合或者是数组,使用这种方式是非常方便的。

    使用数据结构

    如果是list或set,使用TreeSet来排序。

    // TreeSet
    Set<ObjectName> sortedSet = new TreeSet<ObjectName>(new Comparator<ObjectName>() {
        public int compare(ObjectName o1, ObjectName o2) {
            return o1.toString().compareTo(o2.toString());
        }
    });
    sortedSet.addAll(unsortedSet);

    如果是map,使用TreeMap来排序,TreeMap用key来排序

    // TreeMap - using String.CASE_INSENSITIVE_ORDER which is a Comparator that orders Strings by compareToIgnoreCase
    Map<String, Integer> sortedMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
    sortedMap.putAll(unsortedMap);
    //TreeMap - In general, defined comparator
    Map<ObjectName, String> sortedMap = new TreeMap<ObjectName, String>(new Comparator<ObjectName>() {
        public int compare(ObjectName o1, ObjectName o2) {
            return o1.toString().compareTo(o2.toString());
        }
    });
    sortedMap.putAll(unsortedMap);

    如果要对集合做大量的查询操作,这种方式是非常有用的。这种有序的数据结构将使用时间复杂度是O(logn), 比O(n)低。

    陋习

    还有一些陋习,比如使用自定义的排序算法,比如如下的例子,并不是算法效率不好,而是不可读,它有很多不同信息的变量:

    double t;
    for (int i = 0; i < 2; i++)
        for (int j = i + 1; j < 3; j++)
            if (r[j] < r[i]) {
                t = r[i];
                r[i] = r[j];
                r[j] = t;
            }
  • 相关阅读:
    三、springcloud之服务调用Feign
    二、springcloud之熔断器hystrix
    AngularJS中ng-class使用方法
    js中字符串的常用方法
    js中数组的操作
    Linux生成私钥和公钥免密连接
    Jenkins部署码云SpringBoot项目到远程服务器
    Jenkins部署码云SpringBoot项目
    ELK日志分析方案
    Vue项目History模式404问题解决
  • 原文地址:https://www.cnblogs.com/zhonghan/p/3675783.html
Copyright © 2020-2023  润新知