0

次の側面を組み合わせたJavaの最良のリスト/セット/配列は何ですか?

  • 追加された要素の順序を維持する
  • 可能であれば、前方と後方の両方を繰り返すようにします
  • もちろん良いパフォーマンス

LinkedListについて考えた後add(0, element)、逆の順序をシミュレートする要素を挿入できました。ほとんどの場合、逆方向の反復を使用するので、これを使用すると、トラフを反復することができます。そうでなければ、私はできlist.listIterator().hasPrevious()ます。

しかし、より良いアプローチはありますか?

4

2 に答える 2

0

インデックスで取得でき、コレクションを反復処理したい場合は、を使用Listget(index)て、リスト内のその場所にあるオブジェクトを取得できるようにすることができます。配列を使用すると、これを行うことができます。通常どおりにインデックスを参照できますが、配列が大きくなる可能性がある場合は、コレクションの方が使いやすくなります。

オブジェクトを使用するのではなくList.size()、ループを使用してオブジェクトを要素化することができます。これにより、リストを順方向と逆方向の両方で反復処理できます。例えば:forIterator

List<AnObject> myList = new ArrayList<AnObject>;
// Add things to the list

for (int i = 0 ; i < myList.size; i++) {
  AnObject myObject = myList.get(i);
} 

for (int i = myList.size()-1 ; i <= 0 ; i--) {
  AnObject myObject = myList.get(i);
}    

セットは順序を維持しないため、セットは適用されません。

于 2013-01-20T19:21:54.653 に答える
0

ArrayListがおそらく最善の策です。次の方法で繰り返すことができます。

for (ListIterator it = list.listIterator(list.size()); it.hasPrevious();) {
    Object value = it.previous();
}

LinkedListは機能しますが、保存する要素ごとにリンクをインスタンス化する必要があるため、オブジェクト作成のオーバーヘッドが大きくなります。

于 2013-01-20T19:30:41.953 に答える