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中添加元素, 既可以實現自定義排序了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM