キーの範囲を値にマッピングできるデータ構造 質問する

キーの範囲を値にマッピングできるデータ構造 質問する

値の範囲から特定の値を取得してキーにマップするデータ構造を見つけようとしています。

たとえば、次のような条件があります。

  1. 1から2.9までをAにマッピングしたいです。
  2. 4から6までをBにマッピングします。
  3. 6.5 から 10 までを C にマッピングします。

値は 5 で、それをキーにマッピングしたいと思います。上記の条件に基づいて、それを B にマッピングする必要があります。

この問題を解決するためにお勧めできる Java のデータ構造はありますか?

現在、値をキーにのみマップできるハッシュテーブルを使用しています。値の範囲をハッシュテーブルに存在する特定の値にマップしようとしました。しかし、値の範囲を特定の値にマップするところで行き詰まってしまいました。そこで、値の範囲をキーにマップする別の方法を試しています。この問題を解決する方法を誰か知っていますか?

編集:

Martin Ellis のおかげで、私は TreeMap を使用して問題を解決することにしました。

ベストアンサー1

範囲は重複していませんか? 重複している場合は、TreeMap を使用できます。

TreeMap<Double, Character> m = new TreeMap<Double, Character>();
m.put(1.0, 'A');
m.put(2.9, null);
m.put(4.0, 'B');
m.put(6.0, null);
m.put(6.5, 'C');
m.put(10.0, null);

包括的な検索 (つまり、2.9 は undefined ではなく 'A' にマップされます) が必要な可能性が高いため、検索ロジックは少し複雑になります。

private static <K, V> V mappedValue(TreeMap<K, V> map, K key) {
    Entry<K, V> e = map.floorEntry(key);
    if (e != null && e.getValue() == null) {
        e = map.lowerEntry(key);
    }
    return e == null ? null : e.getValue();
}

例:

mappedValue(m, 5) == 'B'

その他の結果は次のとおりです:

0.9 null
1.0 A
1.1 A
2.8 A
2.9 A
3.0 null
6.4 null
6.5 C
6.6 C
9.9 C
10.0 C
10.1 null

おすすめ記事