は、私がl.contains
を呼び出すと、リストをソートする方法を、遅いと思い私は整数のリストを持っています、どのようにソートするのですか?
List<Integer> l = new ArrayList<Integer>();
のような整数のリストを持っています。ソート後、l.contains
はより速く動作しますか?
直接ソートされたリストはありますか?
は、私がl.contains
を呼び出すと、リストをソートする方法を、遅いと思い私は整数のリストを持っています、どのようにソートするのですか?
List<Integer> l = new ArrayList<Integer>();
のような整数のリストを持っています。ソート後、l.contains
はより速く動作しますか?
直接ソートされたリストはありますか?
これより簡単になることはできません。
Collections.sort(l);
あなたはそれがある場合でも、配列をソートする想定していないのArrayListに()Collections.sort(l);
が含まれている使用することができます。あなたは何らかの種類のセットを使用したいでしょう(HashSetは最高のパフォーマンスを提供し、LinkedHashSetはその注文を保持します)。
sort()
メソッドCollectionsはあなたを助けますArrayListをソートします。
TreeSetが役に立ちます。
SortedSet<Integer> s = new TreeSet<Integer>(l);
これにより、重複が削除されることに注意してください。これは、user705414が望むものではない可能性があります。 – Jesper
はい、そうですが、問題の主な目的は** l.contains **をより速く実行させることです。 –
リストをソートすると操作が速くなりません。最悪の場合でもまだO(n)である。
ただし、リストをソートして、その上にバイナリ検索を実行することもできます。
Collections.sort(l);
Collections.binarySearch(l, a);
これは、最悪の場合、O(lg(n))時間がかかります。
しかし、高性能の操作が必要な場合は、ArrayList
の代わりにHashSet
を使用することを検討してください。ほぼ一定の時間がかかります。
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」によって答えがいるようです最高の答えになる。
'l.sort()'は機能しません。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#sort%28java.util.List%29 – Oliver
@Oliver 'sort'は' Collection'で定義されていません – adarshr
これは便利かも知れませんhttp://stackoverflow.com/questions/2661065/a-good-sorted-list-for-java – Marthin