2010-11-19 2 views
1

私はその要素が浮動小数点型の配列を持っています。この配列をハッシュテーブルにコピーできますか? >float -配列をハッシュテーブルにコピーできますか?

おかげ

+4

あなたが関係する2つの値を持っている場合、ハッシュテーブルのみ意味があります:Guavaで、あなたはこれを行うことができます。 – Pointy

+0

キーとは何ですか? – stacker

+0

ハッシュテーブルは何のために使用されますか?キーと値のペアは何ですか? –

答えて

3

あなたは簡単にHashtableintのにそれらを置くことができます。次のメソッドは、配列内のインデックスをキーとして使用します。

float[] arr; 
Hashtable<Integer, Float> table = new Hashtable<Integer, Float>(arr.length); 
for (int i = 0; i < arr.length; i++) { 
    table.put(i, arr[i]); 
} 
+2

誰かがそれをする必要があるのはなぜですか? – khachik

+0

@khachik多分、それらはキーと異なるint値を持つ新しい値を追加するでしょう...(私は分かりません) – jjnguy

+0

@jjnguyはOPに頼みます – khachik

0

ハッシュテーブルはマップを実装しているため、すべてのフロートをいくつかのキーとペアにする必要があります。

+1

これは、回答と比べるとコメントとして役立ちます。 – Chris

3

アレイはマップに直接対応することはできません。それはセットに対応することができます。

new HashSet(Arrays.asList(array)) 
0

jjnguyの答えの彼/彼女の要件のOPの明確化を考えると、ここでのfloat配列内の一意の値の発生をカウントするO(n)(償却)方法があります:実際に

float[] values; 
Map<Float, Integer> occurrences = new HashMap<Float, Integer>(); 
for (float f : values) { 
    int count = occurrences.containsKey(f) ? occurrences.get(f) : 0; 
    occurrences.put(f, count+1); 
} 

//then find multiple occurrences by finding entries with a value > 0 
for (Entry<Float, Integer> entry : occurrences.values()) { 
    if (entry.getValue() > 1) { 
     System.out.println("Duplicate: " + entry.getKey()); 
    } 
} 

それは通常臭いです浮動小数点を何かの鍵として使うか、浮動小数点数を離散的な値であるふりをする形で使用するかを指定します。浮動小数点型は、通常、「連続」値をシミュレートするために使用されます。すべてのインテントと目的で、7.000000000012は7.000000000013と同じとみなされます。

0

配列に浮動小数点数がいくつあるか知りたい場合、最良の解決策はマルチセット(通常はMap<T, Integer>の上に構築されます)です。

float[] floats = ... 
Multiset<Float> multiset = HashMultiset.create(Floats.asList(floats)); 
for (Multiset.Entry<Float> entry : multiset.entrySet()) { 
    Float value = entry.getElement(); 
    int count = entry.getCount(); 
    ... 
} 
関連する問題