効率に関して質問があります。マップとリストの検索
は、私は単純なオブジェクトFoo
public class Foo {
Integer id;
List<String> data;
...
}
のリストを持っている今、私がfooクラス
List<Foo> fooList = new ArrayList<Foo>();
のリストを持って、私は何千ものレコードのコレクションを持っていると私がする必要があると言うと言いますそれらをこのリストに追加しますが、リストにすでに追加されているIDを見つけたら、重複したIDを持つ新しいfooを追加するのではなく、foo.dataリストを追加する必要があります。
私がこの
Map<Integer, Foo> uniqueFoos = new HashMap<Integer, Foo>();
のように遭遇し、私は、レコードの私の何千ものを反復処理するように私は、単にかどうかを確認するために地図上のチェックを行い、それぞれのユニークなfoo.idためのマップを作成するのが賢明だろうfoo.idはすでに
if(uniqueFoos.containes(record.id))
uniqueFoos.getFoo().add(record.data)
else
uniqueFoos.add(record.id, record)
が存在すると私はマップにすべてのレコードを追加したら、私はその後、マップを反復して、リスト
for(Foos f: uniqueFoos)
fooList.add(fooInMap.get(f))
にFOOSのそれぞれを追加します
また、Map
のアイデアを一括して取り除くべきですか? fooList
を繰り返し処理し、既にrecord.idに一致するfoo.id
が含まれているかどうかを検索する方が効率的でしょうか。またはArrayList.contains(...)
メソッドを使用することもできますか?私はそれがマップ方法と比べてこのようにすることははるかに非効率的であるように感じる。
更新:一部の人がセットの使用についても言及しています。だから、Setは他のリストにあるオプションをすべて調べる方法でしょうか?
注:私がここに書いたコードは、単に疑似コードです。
'Set'を使用しないのはなぜ? – Keppil
あなたの 'foo'オブジェクトのID値はどうしていますか?あなたはマップを使用して、IDをキーして、あなたの値を文字列のリストにすることができますか? – David
@keppil私はセットを研究しましたが、正直言って私はこれを使ったことはありません。私は今それを読んでいる。非常に興味深い提案。 –