2

複数の値を持つキーのカスタムハッシュテーブルを作成したいと思います。そのために、私がやりたいことは次のとおりです。

1)サイズInteger_MAXのリンクリスト/配列リストの配列を作成します。

2)番号がキー番号であるリンクリスト/配列リストに値(int)を挿入します。

今、私は2つの問題に直面しています。

1)リンクリスト/配列リストの配列を定義する方法。

2)それらを原始的にする方法はありますか?

それをより良くするための助けやアイデアは私に役立ちます。

ありがとう。

編集:ハッシュテーブルの概念は、複数の値を持つキーとは何の関係もないことを私は知っています。でも、そういう風にしたいと思います。

カスタムハッシュマップとプリミティブ用に作成したい(グアバのように非常に大きなスペースを必要とするため、オブジェクト用ではありません)。

4

5 に答える 5

3

guavaプロジェクトのマルチマップを使用することを強くお勧めします。ArrayListMultiMapを使用して、探している動作を正確に取得できます。

于 2012-07-31T20:41:36.307 に答える
2

1)他の配列と同じようにLinkedListsの配列を定義します。

LinkedList[] l = new LinkedList[10];

ただし、代わりにリストの配列を実行する必要があります。

List[] l = new List[10];

2)配列はプリミティブではありません。LinkedListsもそうではありません。また、LinkedListsは参照のみを保持でき、プリミティブ型は保持できません。カスタムハッシュマップクラスにプリミティブを格納する必要がある場合は、LinkedListやArrayListではなく、配列のみを使用する必要があります。

于 2012-07-31T20:44:08.610 に答える
1

必要なのが複数値のマップである場合は、コレクションを使用してください

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiValueMap.html

于 2012-07-31T20:38:58.977 に答える
1

Guava + Trove Multimapの実装を本当に確認しましたか?このように:

final int listCapacity = 10; // Intege.MAX_VALUE isn't an option
final ListMultimap<Integer, Integer> multimap =
    Multimaps.newListMultimap(
        TDecorators.wrap(
            new TIntObjectHashMap<Collection<Integer>>()), //Map<int, Collection>
        new Supplier<List<Integer>>() {
          @Override
          public List<Integer> get() {
            return TDecorators.wrap(new TIntArrayList(listCapacity)); //List<int>
          }
        });

あなたは完全に吹き飛ばされるでしょうListMultimap<Integer, Integer>、それであなたはすることができます:

multimap.putAll(1, Ints.asList(1, 11, 111, 1, 1111));
multimap.putAll(2, Ints.asList(2, 22, 222, 2, 2222));
multimap.put(3, 333);

System.out.println("multimap: " + multimap);
System.out.println("get(2): " + multimap.get(2));
System.out.println("get(3): " + multimap.get(3));
System.out.println("get(4): " + multimap.get(4));

出力:

multimap: {3=[333], 2=[2, 22, 222, 2, 2222], 1=[1, 11, 111, 1, 1111]}
get(2): [2, 22, 222, 2, 2222]
get(3): [333]
get(4): []

各リストはのインスタンスでありTIntArrayList、各マップはですTIntObjectHashMap。これは非常にメモリ効率が高く、最適化されています(マップのパラメータを試してみる必要があります)。同時に使用できる、より最適化された実装を構築できるとは思いません。

唯一の欠点は自動ボクシングのコストですが、それほど多くのメモリを消費せず、おそらく時間もかかりません。

于 2012-07-31T21:52:33.107 に答える