2016-10-04 6 views
0

私は、衝突に対処するために線形プロービングを使用するハッシュマップを持っています。私はそれを横切りたい。概念的には、これは非常に簡単ですが、ジェネリックスを使用することで私の心が奪われています。ジェネリックスを使ったハッシュマップ線形回帰(Java)

ハッシュマップの内部配列内のエントリは、ジェネリック医薬品としてのそれらのキーと値のペアを持っている - この

public entry(K key, V value) { 
     this.key = key; 
     this.value = value; 
    } 

ように、これらのエントリは、エントリ・アレイに記憶されている - この

private entry[] entries; 

よう私は、特定のキーで始まるハッシュマップをトラバースしたいと思います。内部配列の終わりに到達し、次にキーまで配列の先頭に戻り、循環配列で配列全体をカバーします。

public V traverse(K k) { 

    //look from current key 
    for(int i = (int)k; i < entries.length; i++){ 
     //visit node 
    } 
    //go back to start, and look up to key 
    for(int i = 0; i < (int)k; i++){ 
     //visit node 
    } 
} 

私は整数でソートの愚かだったように、キーをキャスト、その型を実現してきましたが、私は実際にこのトラバースを行うための作業方法を見つけるのに苦労しています。

+0

まあ、最初に見つけなければなりません。 'entries ='をループして、 '.key == k'で見つけてコードを使います。 – Bakuriu

答えて

0

あなたが理解できれば、LinkedHashMap(HashMap)()を作成し、それを横断的に行うことができます。

0

HashMapは、期待どおりの順序でエントリを保存しません。順序付けはキーのハッシュに基づいており、リンクされたリストの配列として編成されています。

定義済みの順序付けが必要な場合は、キーの自然順序付けを使用するTreeMapを使用する必要があります。カスタムソートが必要な場合は、コンストラクタでComparatorを提供できます。次にmap.keySetを繰り返し実行します。

しかし、私はあなたが必要と思う(途中で反復を開始する)はサポートされていません。最初のノードで反復を開始し、目的のキーに達するまで何もしないで、残りのエントリで作業を行い、再び目的のキーに到達するまで反復を開始します。