2012-04-06 69 views
3

我有一個帶有浮點鍵和字符串值的Java HashMap。現在給定一個不在HashMap中的Float,我怎麼找到與給定的Float最相似的鍵?Java HashMap找到最佳匹配鍵

+1

。 – Jack 2012-04-06 20:09:07

+0

@Jack是因爲浮點數不夠精確,兩個相似的值可能會給出相同的散列值? – Lucas 2012-04-06 20:25:11

+0

請定義「最相似的」 – 2012-04-06 21:50:22

回答

8

聽起來像java.util.NavigableMap的實現之一的工作。

+0

+ +1在人們用較少使用語言的實用程序回答時很有價值 – kommradHomer 2012-04-06 20:08:24

+1

好的答案,可以使用'ceilingKey(K key)'和'floorKey(K key) '確定兩個最接近的鍵並計算哪一個更接近。 – 2012-04-06 20:40:54

+0

聽起來不錯。我正在使用Android SDK 2.1,但無法找到該接口-.- – 2012-04-06 20:44:03

1

使用浮點數作爲HashMap中的鍵是一個非常糟糕的主意!

+0

爲什麼這是一個壞主意? – 2012-04-06 20:37:16

+0

浮點數不是整數值。你必須處理不明顯的計算差異。最後一位的小差異會導致不同的密鑰,因此導致 – 2012-04-06 20:43:09

0

我想你會更好使用一個簡單的數組/ ArrayList,條目按鍵排序並執行Collections.binarySearch()。如果沒有找到該條目,則返回最近的鄰居。

0

我建議你要絕對避免使用`HashMap`浮筒作爲鍵的最簡單方式

HashMap<Float, String> map = new HashMap<Float, String>(); 

    Float newFloat = 123F; 

    Float minDif = null; 
    Float findedValue = null; 

    for (Float key : map.keySet()) { 
     Float dif = Math.abs(key - newFloat); 
     if (minDif != null) { 
      if (dif < minDif) { 
       minDif = dif; 
       findedValue = key; 
      } 
     } else { 
      minDif = dif; 
      findedValue = key; 
     } 
    }