2011-06-26 9 views
3

だから、当然、私はハッシュテーブルのような何かをしたいこの問題のベストデータ構造ですか?

add (1, "Bobby") 
add (6, "Sue") 
add (3, "Mary") 
add (8, "John") 
add (15, "Joe") 

のように、私はこのプログラムのためのJavaを使用しています、と私は現在、私は整数キーでテーブルにキー/値のペアを追加したい状況がありますしかし、私がルックアップを行うときに、正確な値が見つからない場合は、要求されたキーよりも大きくない最も近いキーを返すことを望みます。私はJavaのutilのクラスのいずれかを使用することを望んだ

だから、例えば私は7を検索すれば、それは「スー」を返す必要がありますが、私は9を検索すれば、それは返すべきである「ジョン」

(ハッシュテーブル、TreeMapなど)、私はそれをどうやって行うかについてはあまりよく分かりません。

+1

(7)リターンスー得ないでしょうか? –

答えて

4

TreeMapのは、あなたが

探している機能を提供
TreeMap<Integer,String> tree = new TreeMap<Integer,String>(); 
tree.put (1, "Bobby"); 
tree.put(6, "Sue"); 
tree.put (3, "Mary"); 
tree.put (8, "John"); 
tree.put (15, "Joe"); 
System.out.println(tree.floorEntry(7)); // Sue 
System.out.println(tree.floorEntry(9)); // John 
+0

すごく感謝!私はそれを試してみます。 –

0

あなたのようなこの使用してSQL何かしたいと思った場合:

select top 1 * from hashTable where keyColumnId >= @passedValueId 

が働くだろう。

+0

とにかくjavaでそれをするには? SQLのオーバーヘッドはおそらくこの特定の事のためのビットです。ありがとう、結構です! –

+0

私は@Eugen Constantin Dincaの答えがJavaの唯一の解決策の良い基礎だと思います。 – amelvin

7

NavigableMapとなります。

+0

+1 Javaを使った良い解決策のように見える – amelvin

+0

+1これはTreeMap implの背後にあるitfであるとは思わなかった。 – maasg

0

よく構造からデータを読み込んだり挿入することはめったにありませんが、単純なソート配列を使用してバイナリ検索を行うことはできません。検索のパフォーマンスが心配ならば、はるかに単純で簡単にはできません。今は構造を定期的に更新すればそれほど素晴らしいものではありません。そして、もっと複雑なものを使う必要があります。

また、バイナリツリーはまったく同様に動作しません。値が見つからない場合は、正しいノードが存在する位置を検索し、その前のノードを使用します。コレクションライブラリから

関連する問題