【问题标题】:Relative sort - insertBefore() and insertAfter() methods相对排序 - insertBefore() 和 insertAfter() 方法
【发布时间】:2011-12-01 13:21:43
【问题描述】:

我需要对一个列表进行排序,其中的项目是对象,这些对象描述了项目应如何相对于同一列表中的其他项目进行排序。这些项目是动态加载的,所以我无法确保它们是按顺序开始的。

我应该查看哪些列表? ArrayList 没有像 insertBefore() 或 insertAfter() 这样的方法。 LinkedLists 可能,但我不确定 LinkedLists 的 Java 实现是否提供此类方法。有什么想法吗?

注意:我应该澄清一下我的数组中没有重复项...

【问题讨论】:

  • 您能否提供一个更具体的示例来说明您要完成的工作?

标签: java arrays list linked-list


【解决方案1】:

您应该使用Collections.sort(List,Comparator),而不是编写自己的排序例程。这将使用提供的比较器对任何 List 进行排序。

您需要实现一个comparator,它将产生所需的排序。

如果这不适用于手头的问题,请举例说明您的要求。

【讨论】:

  • 阅读 OP 的问题,我感觉他正在处理诸如"I should come before X"、“I should come after Y”、"X""Y" 之类的字符串。如果是这种情况,比较器就不行了。
  • 不,实际上并非如此。我不必解析任何字符串。
【解决方案2】:

ArrayList 没有像 insertBefore() 或 insertAfter() 这样的方法。

没有,但它确实有 indexOf(o)add(o, index) 应该足以轻松实现 insertBeforeinsertAfter

【讨论】:

    【解决方案3】:

    如果您想插入新项目并保持集合排序,您可以使用 Java 中的优先队列类。集合不允许您存储重复项。有关优先队列的更多信息,您可以查看此答案

    Sorted collection in Java

    【讨论】:

    • 投票!这是最简单的 - 只需使用 PriorityQueue,最快 - O(logN) 并允许重复。
    【解决方案4】:

    试试SortedSet 类。

    如果你正确实现了 Comparable 接口,它会自动为你排序。

    【讨论】:

    • 不允许重复。
    【解决方案5】:

    如果你可以让对象实现Comparable,那么调用Collections.sort(myArrayList) 将排序任何List对象,包括ArrayList。

    或者使用 Collections.sort(myArrayList, myComparator) 和适当的Comparator

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2013-06-05
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多