我有一个整数列表,如何排序?

时间:2012-01-16 15:06:56

标签: java

有一个像

这样的整数列表
List<Integer> l = new ArrayList<Integer>();

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

我可以直接使用任何sortedList吗?

7 个答案:

答案 0 :(得分:13)

它不能比这简单。

Collections.sort(l);

答案 1 :(得分:7)

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

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

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

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

ArrayList上的

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

答案 5 :(得分:0)

TreeSet 可能对您有用。

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

答案 6 :(得分:0)

如果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”的答案似乎是最好的答案。