7

クイック インデックスとハッシュ アクセスの両方を持つコレクション クラスが必要です。これでArrayListができました。インデックスへのアクセスは良好ですが、彼のcontains方法は効率的ではありません。HashSet には適切なcontains実装がありますが、インデックス付きアクセスはありません。両方を持っているのはどのコレクションですか? おそらくApacheからの何か?または、インデックス付きアクセス用の ArrayList とcontainsチェック用の HashSet の両方を持つ独自のコレクション クラスを作成する必要がありますか?

get(int index)明確にするために:私は両方が必要ですcontains(Object o)

4

4 に答える 4

1

インデックス付きアクセスのパフォーマンスが問題ではない場合、最も近い一致はLinkedHashSetであり、そのAPIはそれが

予測可能な反復順序を使用した、Setインターフェイスのハッシュテーブルとリンクリストの実装。

少なくとも、LinkedListPerformanceよりもパフォーマンスが悪くなるとは思いません。そうでなければ、私はあなたのArrayList+HashTableソリューション以外の選択肢を見ることができません

于 2013-02-22T12:10:04.443 に答える
0

このようにしてください。両方の長所を活かすために、ハッシュ手法とリストの組み合わせを使用してください:)

class DataStructure<Integer>{
   Hash<Integer,Integer> hash = new HashMap<Integer, Integer>();
   List<Integer> list = new ArrayList<Integer>();

    public void add(Integer i){
        hash.add(i,i);
        list.add(i);
    }
    public Integer get(int index){
        return list.get(index);
    }
   ...
} //used Integers to make it simpler

だから反対する。HashMap/HashSetおよびArrayListに保持します。

だから使いたいなら

 contains method : call hashed contains method.

 get an object with index: use array to return the value

これらの両方のコレクションが同期していることを確認してください。また、両方のデータ構造の更新/削除に注意してください。

于 2013-02-22T13:05:41.660 に答える
0

インデックスを最初から最後までトラバースしている場合は、これでニーズを満たすことができると思います: LinkedHashSet

インデックスとハッシュ アクセスを介してランダムにアクセスする必要がある場合、他の誰もより良い提案を持っていない場合は、両方を行う独自のコレクションを作成できると思います。

于 2013-02-22T12:02:47.803 に答える
0

正確なルックアップ時間はわかりませんが、 Map インターフェースの実装を使用できるかもしれません。でオブジェクトを保存できますmap.put(objectHash, obj)

次に、特定のオブジェクトがあることを確認できます。

boolean contained = map.containsValue(obj);

そして、ハッシュを使用してマップ内のオブジェクトを検索できます。

MyObject object = map.get(objectHash);

ただし、唯一の欠点は、このルックアップ呼び出しでハッシュを知る必要があることです。これはおそらく実装には含まれていない可能性があります。

于 2013-02-22T13:53:02.433 に答える