zoukankan      html  css  js  c++  java
  • java-TreeSet进行排序的2种方式

    TreeSet和HashSet的区别在于, TreeSet可以进行排序, 默认使用字典顺序排序, 也可以进行自定义排序

    1, 自然排序

    2, 比较器排序

    自然排序: 

    1, 需要被排序的类实现Comparable<T>接口

    2, 重写其中的 comparato

    package xfcy_04;  
    /** 
     * Student类 
     * @author wenbronk
     * 
     */  
    public class Student implements Comparable<Student> {  
        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;  
        }  
      
        @Override  
        public int compareTo(Student s) {  
            //return -1; //-1表示放在红黑树的左边,即逆序输出  
            //return 1;  //1表示放在红黑树的右边,即顺序输出  
            //return o;  //表示元素相同,仅存放第一个元素  
           this.age.compareTo(s.age)return num2;  
        }  
          
    } 

    自定义比较器排序; 

    这种方法需要一个新的类实现Comparator<T>接口

    重写其中的Compare 方法

            TreeSet<String> wifiSet = new TreeSet<String>(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    JSONObject obj1 = JSON.parseObject(o1);
                    JSONObject obj2 = JSON.parseObject(o2);
                    return obj1.getDouble("distance").compareTo(obj2.getDouble("distance"));
                }
            });

    然后, 改成函数式编程可以写成:

            Set<JSONObject> treeSet = new TreeSet<>((first, second) -> {
                JSONObject base1 = first.getJSONObject("base");
                String[] loc1 = base1.getString("location").split(", * ");
                JSONObject base2 = second.getJSONObject("base");
                String[] loc2 = base2.getString("location").split(", * ");
                
                Double d1 =  GeoUtils.getDistance(new Point(Double.valueOf(loc1[1]), Double.valueOf(loc1[0])),
                        new Point(lat, lng));
                Double d2 =  GeoUtils.getDistance(new Point(Double.valueOf(loc2[1]), Double.valueOf(loc2[0])),
                        new Point(lat, lng));
                
                return d1.compareTo(d2);
            });

     然后正常往set中添加元素, 既可以实现自定义排序了

  • 相关阅读:
    揭秘重度MMORPG手游后台性能优化方案
    算法:贪心、回溯(su)、分治、动态规划,思想简要
    表单提交 curl和浏览器方式
    mysql 聚集索引,非聚集索引,覆盖索引区别。
    虚拟机中的Linux不能上网
    第二篇 界面开发 (Android学习笔记)
    第一篇 入门必备 (Android学习笔记)
    C/C++知识补充 (1)
    向后/向前引用, 零宽断言, 转义, 命名分组
    C/C++知识补充(2) C/C++操作符/运算符的优先级 & 结合性
  • 原文地址:https://www.cnblogs.com/wenbronk/p/7227400.html
Copyright © 2011-2022 走看看