Neden java Collections singletonMap'e ihtiyacınız olduğunu anlamıyorum ? Çok iş parçacıklı uygulamalarda yararlı mı?
Neden java Collections singletonMap'e ihtiyacınız olduğunu anlamıyorum ? Çok iş parçacıklı uygulamalarda yararlı mı?
Yanıtlar:
Temel olarak, bunu yapmanıza izin verir:
callAPIThatTakesAMap(Collections.singletonMap(key, value));
bunun yerine:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
Bu, yalnızca tek bir anahtar / değer çiftiniz olduğunda çok daha güzeldir. Bu durum muhtemelen çok sık ortaya çıkmaz, ancak singleton()
ve singletonList()
oldukça sık yararlı olabilir.
Bazı genel koda bir harita iletmeniz gerekiyorsa (bir parametre olarak veya bir yöntemin sonucu olarak) ve bu özel durumda bunu biliyorsanız - ancak belki de haritayı aynı genele geçiren diğer durumlarda değil. kod - geçmek istediğiniz haritanın yalnızca tek bir anahtarı vardır. Bu durumda, SingletonMap tam gelişmiş bir harita uygulamasından daha etkilidir ve programcı için daha uygundur çünkü söylemeniz gereken her şey yapıcıda söylenebilir.
Ayrıca, Collections.singletonMap () tarafından döndürülen bir SingletonMap uygulaması, normal bir HashMap'ten daha küçük bir bellek ayak izine sahiptir. Yalnızca iki üye alanı içermesi gerekir: anahtar ve değer, oysa bir HashMap dahili bir Node nesneleri dizisi ve diğer üye alanları tutar. Dolayısıyla , bu haritaların çoğunu bellekte oluşturuyorsanız, Collections.singletonMap () kullanmak akıllıca bir seçim olacaktır.
Esas olarak kolaylık ve soyutlama için. Bazı API'ler Collection
bir argüman olarak alır ve nesneleri a Set
veya Map
.
singletonMap()
ve singletonList()
aslında singletonSet()
Java 1.3'te daha sonra tanıtıldı çünkü singletonSet()
yararlı olduğu kanıtlandı.
birçok cevap sana ne zaman söyledi, ama ne zaman yapacağımı belirtmek istiyorum not use it
bunu kullanmıyorum eğer istersen put items later on
,
çünkü koyacak uygulaması singletonMap
atacakUnsupportedOperationException
Bu sadece başka bir örnek, ancak şu kod satırını yazdım:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}
not edin @Override
. Arayüz daha genel olarak birçok şeyin haritasını alabilir; bu belirli örnekleme her zaman bir şeyi içeren bir harita döndürür. Ayrıca haritanın anahtarının bir Enum olduğunu unutmayın. Yani haritaların hiçbir zaman büyük olmaması gerekiyor, sadece hangi eylemler belirtilirse belirtilsin sonuçlarını içermeleri gerekiyor. Benim gerçek örneğimde 5 adede kadar eylem var ve bu örnekleme bunlardan sadece birini kullanıyor.
Tam olmak EnumSet
veya EnumMap
bu durumlarda genellikle uygundur, ancak bunlar yukarıdaki kodla karşılaştırıldığında yine de can sıkıcı bir şekilde ayrıntılıdır.
SingletonMap
onu düzenledim. O zamandan beri değişikliklerimi geri aldım;)