简体   繁体   English

TreeSet排序顺序混乱

[英]TreeSet Sorting Order Confusion

I know that TreeSet in Java sort its elements in ascending order.我知道 Java 中的 TreeSet 按升序对其元素进行排序。 For integer it would be 1, 2, 3, 4, 5, for String it would be alphabetical.对于 integer,它将是 1、2、3、4、5,对于字符串,它将是按字母顺序排列的。 However, what if I want to input objects in that TreeSet, how it is going to be sorted by default?但是,如果我想在那个 TreeSet 中输入对象,默认情况下它是如何排序的呢?

That object must either implement Comparable object 必须实现Comparable

class MyObject implements Comparable<MyObject>
{
  int value;

  MyObject(int value)
  {
    this.value=value;
  }

  //Sorting order controlled here
  @Override
  public int compareTo(MyObject m)
  {
    return Integer.compare(this.value,m.value);
  }
}

TreeSet<MyObject> set=new TreeSet();
//add stuff here

Or you supply your own Comparator .或者您提供自己的Comparator Use lambda expressions with java 7 and above使用 lambda 表达式与 java 7 及以上

TreeSet<MyObject> set=new TreeSet((obj1,obj2)->Integer.compare(obj1.value,obj2.value));

Comparator takes precedence over Comparable and your object dosen't need to implement Comparable which is useful for 3rd party libraries which don't implement the interface Comparator 优先于 Comparable 并且您的 object 不需要实现 Comparable 这对于不实现接口的 3rd 方库很有用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM