【问题标题】:I have a list of integers , how to sort it?我有一个整数列表,如何排序?
【发布时间】:2012-01-16 15:06:56
【问题描述】:

有一个整数列表,如

List<Integer> l = new ArrayList<Integer>();

我认为调用l.contains 很慢,如何对列表进行排序。排序后,l.contains 会表现得更快吗?

有没有可以直接使用的sortedList?

【问题讨论】:

标签: java


【解决方案1】:

没有比这更简单的了。

Collections.sort(l);

【讨论】:

    【解决方案2】:

    列表排序不会使包含操作更快。在最坏的情况下仍然是 O(n)。

    但是,您可以对列表进行排序并在其上执行二进制搜索。

    Collections.sort(l);
    Collections.binarySearch(l, a);
    

    在最坏的情况下,这将花费 O(lg(n)) 时间。

    但如果您想要高性能的包含操作,请考虑使用HashSet 而不是ArrayList。这需要几乎恒定的时间。

    【讨论】:

      【解决方案3】:

      您可以使用Collections.sort(l);

      【讨论】:

        【解决方案4】:

        Collections 中的 sort() 方法可以帮助您对 ArrayList 进行排序。

        【讨论】:

          【解决方案5】:
          ArrayList 上的

          contains() 不假定数组已排序,即使它是。您将需要使用某种集合(HashSet 将为您提供最佳的查找性能,而 LinkedHashSet 将保留顺序。即使是 TreeList 也会为您提供更好的性能。)

          【讨论】:

            【解决方案6】:

            TreeSet 可能对您有用。

            SortedSet<Integer> s = new TreeSet<Integer>(l);
            

            【讨论】:

            • 请注意,这也会删除重复项,这可能不是 user705414 想要的。
            • 是的,你是对的,但问题的主要目的是让 l.contains 执行得更快。
            【解决方案7】:

            如果Collections.sort(l) 没有给出想要的结果,请尝试Collections.sort(l, comparator),其中“比较器”是这样的:

            class MyComparator implements Comparator<Integer>
            {
              public int compare(Integer lhs, Integer rhs)
              {
                // perform the desired comparison.
              }
            }
            

            编辑:我会留下这个,但“Mairbek Khadikov”的答案似乎是最好的答案。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-10-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多