有一个像
这样的整数列表List<Integer> l = new ArrayList<Integer>();
我认为调用l.contains
的速度很慢,如何对列表进行排序。排序后,l.contains
会表现得更快吗?
我可以直接使用任何sortedList吗?
答案 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)
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”的答案似乎是最好的答案。