3

私はこのプログラムに Java を使用しています。現在、次のような整数キーを持つテーブルにキーと値のペアを追加したい状況があります。

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

当然、ハッシュテーブルのようなことをしたいのですが、検索を行うときに正確な値が見つからない場合は、要求されたキーよりも大きくない最も近いキーを返したいと思います。

たとえば、7 を検索すると "Sue" が返されますが、9 を検索すると "John" が返されます。

Java util クラス (HashTable、TreeMap など) のいずれかを使用したいと考えていますが、その方法がよくわかりません。

4

4 に答える 4

7

NavigableMapはそのトリックを行います。

于 2011-06-26T17:57:24.060 に答える
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
于 2011-06-26T18:51:26.027 に答える
0

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

また、完全にはわかりませんが、バイナリツリーも同様に機能しないと思いますか? 正しいノードがあるべき位置を検索し、値が見つからない場合はその前のノードを使用します。

于 2011-06-26T18:24:26.817 に答える
0

次のようなSQLを使用してこれを実行したい場合:

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

動作します。

于 2011-06-26T17:55:51.090 に答える