2012-07-26 24 views
8

Double in HashMapへの回答に記載されているように、DoublesはHashMapsで使用するべきではありません。私のケースは違うと信じていますが、私はこれについて何も見ていないので、私は確信して欲しいと思いました。TreeMapのキーとしてDoubleを使うべきですか?

私は、オブジェクトに関連付けられた一連の二重値を持つつもりですが、それらを二重値でソートする必要があります。 TreeMapは適切なソリューションですか?より良いものがあるだろうか?二重値は数学的に生成されるので、二重値の可能性は非常に低くなります。

編集:私が必要とするのは、これらのオブジェクトのリストを関連付けられている倍数でソートすることです。ダブルスの値は破棄され、私は彼らが等しいかどうかを比較することは困難であるため、ダブルスは、ハッシュマップで使用すべきではないmap.get(key)

+0

それらをソートする簡単なコレクションを使用することですあなたは安全でなければならないように思えます。重複要因の処理を追加して、重複が発生した場合に備えて重複を防ぐことができます。 – Wug

答えて

13

を呼び出すことは決してないだろう。あなたが特定のキーに基づいてget値に

  • を試してみますか?

    • はい場合は、「難しい比較する」についての推論が適用され、あなたは、おそらくこのようなデータ構造を避ける(または常にマップの範囲をtailMap/headMap/submapに依存しており、フェッチ)する必要があります。

    • なした場合(すなわち、あなたは一般的にちょうどfor (Double key : map.keySet()) ...を行うかentrySetを反復処理します)、私はキーとしてDoubleを使用して、あなたは大丈夫だと言うでしょう。

    二重値は数学の束を生成しているので、重複した値の可能性が極めて低い

  • あなたが実際にが重複し得る行う場合には、バグですか?

    • はいは、それが使用するために適切なデータ構造ではありません場合。たとえば、代わりにGuavaのMultimapを使用できます。

    • (どちらの値にマップするかは関係ありません。なぜなら、いずれにしても小さなεでしか違いがないからです)。平等のための比較 - それは、ハッシュマップ内のダブルスであるよう

+0

これは完璧です。私の答えはどちらも「いいえ」なので、私は行きたい。 – MalcolmOcean

1

ツリーマップでダブルスの問題はまったく同じです。treeMap.get(myDouble)のコールを避け、代わりに範囲クエリを使用する場合(例:submapを使用する場合)は問題ありません。

TreeMap<Double,String> tm = new TreeMap<Double,String>(); 
tm.put(1.203, "quick"); 
tm.put(1.231, "brown"); 
tm.put(1.233, "fox"); 
tm.put(1.213, "jumps"); 
tm.put(1.243, "over"); 
tm.put(1.2301, "the"); 
tm.put(1.2203, "lazy"); 
tm.put(1.2003, "dog"); 
for (Map.Entry<Double,String> e : tm.subMap(1.230, 1.232).entrySet()) { 
    System.out.println(e); 
} 

これは

1.2301=the 
1.231=brown 

ideoneにこのスニペットを参照してくださいを印刷します。

0

並べ替えが必要な場合は、より良いコレクション(例:SortedSet)があります。任意のリストを使用してソート用ユーティリティを使用することもできます(私は彼らがjava.util.Collectionにいると思います)。

キーでアイテムに直接アクセスする場合のみ、マップとテーブルを使用します。

1

あなただけそれらをソートしたい場合は、最善のことは、二重のラッパーオブジェクトとオブジェクトを作成し、このラッパーの「同等の」インタフェースを実装し、

関連する問題