2012-07-26 18 views
8

Double in HashMap cevabında açıklandığı gibi, Eşler, Eşitlik'te karşılaştırılmaları zor olduğundan HashMaps'te kullanılmamalıdır. Davamın farklı olduğuna inanıyorum ama bu konuda hiçbir şey görmediğimden emin olmak istediğimi düşündüm.Bir TreeMap uygulamasında çift olarak anahtar kullanmalı mıyım?

Nesnelerle ilişkili bir dizi çift değerlere sahip olacağım ve bunların çift değerlere göre sıralanmasını istiyorum. TreeMap uygun bir çözüm mü? Daha iyi bir tane olur mu? Çifte değerler bir grup matematikten oluşur, bu nedenle bir çift değer olasılığı çok düşüktür.

DÜZENLEME: Açıklığa kavuşmalıyım: tek ihtiyacım olan şey, ilişkilendirildikleri çiftler tarafından sıralanan bu nesne listesine sahip olmak. çiftlerde değerleri atılacak ve eşitlik karşılaştırılması zordur çünkü map.get(key)

+0

sıralamak için basit bir koleksiyon kullanmak olacaktır Güvende olmalısın gibi görünüyor. Yinelenenlerin olmasını önlemek için bazı fudge factor işlemlerini ekleyebilirsiniz. – Wug

cevap

13

Çiftler HashMaps içinde kullanılmamalıdır çağrı asla. Hiç belli tuşlara göre get değerlere

  • dener misin?

    • evet, o zaman "zor karşılaştırmak için" hakkında akıl uygular ve muhtemelen bu tür veri yapısını önlemek (veya her zaman haritanın aralıkları tailMap/headMap/submap itimat ve getirme) gerekmektedir.

    • Eğer hiçbir (yani normalde sadece for (Double key : map.keySet()) ... yapmak ya entrySet üzerinde yineleme olacak) o zaman ince tuşları olarak Double kullandığınız söyleyebilirim.

    çift değerler matematik bir grup olarak oluşturulur, böylece bir çift değerin olasılığı çok düşüktür

.

  • bir böcek aslında yinelenen almak yaparsam mı?

    • evet o zaman kullanmak doğru veri yapısı değil edin. Örneğin, Guava'dan bir Multimap kullanabilirsiniz.

    • hiçbir, o zaman iyi olmalı (yalnızca zaten küçük bir epsilon farklılık çünkü yani o, bu eşleştiren iki değerden hangisi olduğu önemli değil). eşitlik için karşılaştırma - bu karma haritasında çiftlerde ile olduğu gibi

+0

Bu mükemmel. Her iki cevabım da "hayır" dır, ben de gidiyorum. – MalcolmOcean

1

ağaç haritalarında çiftlerde sorun tamamen aynıdır.treeMap.get(myDouble) çağrılarını engellemek ve bunun yerine aralık sorguları ile kalmak (örneğin, submap kullanarak) iyi olması gerekir.

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); 
} 

Bu

1.2301=the 
1.231=brown 

ideone bu ön bilgi yazdırır.

0

Yalnızca bunları sıralamak istiyorsanız, daha iyi koleksiyonlar vardır (örneğin, SortedSet). Ayrıca herhangi bir listeyi kullanabilir ve sıralama için yardımcı programları kullanabilirsiniz (bence bunlar java.util.Collection'dadır).

Bir öğeye doğrudan bir tuşla erişmek istediğinizde yalnızca Haritalar ve Tablolar'ı kullanın.

1

onları sadece sıralamak isterseniz, en iyi şey çift ve nesne etrafında bir sarıcı nesnesi, bu sargı üzerinde "karşılaştırılabilir" arabirimini uygulamak oluşturmak ve onlara

İlgili konular