2013-02-20 19 views
13

Guava kütüphanesinde ImmutableLinkedHashMap<> gibi bir şey bulmak istiyorum. Ekleme siparişi ile değişmez bir anahtar-değer veri yapısı kullanmam gerekiyor. Peki, ne kullanmalıyım?Ekleme sırasını tutan değişmez bir anahtar-değer yapısına ihtiyacım var

+2

Bkz. [Paket com.google.common.collect Açıklama] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/package-summary.html#package_description) ve [IautableCollections Guava wiki'de Açıklandı] (https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained). – Xaerxess

+0

[Google Koleksiyonları ImmutableMap yineleme sırası] 'nın olası kopyası (http://stackoverflow.com/questions/3810738/google-collections-immutablemap-iteration-order) – Barett

cevap

24

ben sonra ne tam olarak anlamak ediyorum emin değilim ama Map gerçekten değişmez ise, dokümanın belirtildiği gibi ImmutableMap

bakmak istiyorum mght:

An kullanıcı tarafından belirlenen yineleme sıralamasıyla, değişmez, karma tabanlı Map. Boş anahtarlara veya değerlere izin vermez. , ImmutableMap örneğinin kendi verilerini içerdiği ve hiçbir zaman değişmeyeceği Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>)'dan farklı olarak, yine de değişebilen ayrı bir haritanın görünümüdür. ImmutableMappublic static final haritalar ("sabit haritalar") için uygundur ve ayrıca benzer bir şekilde kullanabiliriz, kolayca bir arayan

Örneğin sınıfınızda sağlanan bir haritanın bir "savunma kopya" yapalım:

Map<Integer, String> m = ImmutableMap.of(5,"Five",6,"Six",7,"Seven"); 

Umut ettikten sonra budur.

+0

Evet, sadece bunu da söyleyecektim. “ImmutableMap” çalışması gerektiği gibi görünüyor. – 808sound

+0

Buradaki sorun, 'ImmutableSortedMap' 'ImmutableMap' öğesini genişletmesidir, bu nedenle, bu yönteme sahip müşterileriniz varsa, ekleme siparişi bakımını türlere göre zorlayamazsınız. –

6

İlk önce bir LinkedHashMap oluşturun ve orijinal haritayla aynı sırada olacak şekilde değiştirilemez bir kopya oluşturmak için ImmutableMap.copyOf(linkedHashMap) kullanın.

+17

Neden rahatsız oluyorsunuz? 'ImmutableMap' zaten ekleme siparişini kullanıyor. –

İlgili konular