【问题标题】:How will sort method do a sort, on a list that contains objects of type Foo?sort 方法将如何对包含 Foo 类型对象的列表进行排序?
【发布时间】:2013-08-25 18:50:27
【问题描述】:

LinkedList 的类型如何:

LinkedList<FooClass> list = new LinkedList<FooClass>();

// FooClass extends Comparable

list.add(foo_obj_1);
list.add(foo_obj_2);
list.add(foo_obj_3);
list.add(foo_obj_4);

排序:

Collection.sort(list);

sort 方法对包含对象列表的list 有什么影响。列表将根据什么进行排序?

【问题讨论】:

  • 没有意识到 Java API 已关闭并且无法访问以进行审查。太糟糕了,因为这一切都在那里得到了很好的解释。

标签: java sorting collections linked-list


【解决方案1】:

如果你让你成为一个对象comparable,那么你覆盖compareTo方法。然后,您可以根据要比较的字段编写自己的自定义标准。然后可以照常执行排序。

class Author implements Comparable<Author>{
    String firstName;
    String lastName;

    @Override
    public int compareTo(Author other){
        int last = this.lastName.compareTo(other.lastName);
        return last == 0 ? this.firstName.compareTo(other.firstName) : last;
    }
}

如果您的对象没有实现Comparable,那么您将无法执行任何各种排序实现。

【讨论】:

    【解决方案2】:

    查看Collections#sort(List&lt;T&gt;) 的 API。只有当 T 扩展 Comparable 时才会编译。

    如果Foo 没有扩展Comparable,您的代码将无法编译。 如果是,则列表将按照 Foo 的自然顺序排序,如 here 所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 2021-06-07
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多