O yüzden, sadece bunların nasıl kullanılacağını anlamak için ArrayListMultimap
ve LinkedListMultimap
böylece için javadoc okuyordu ve ben hem yinelenen anahtar-değer çifti destekleyen (ve bu tarafından ben aynı anahtarları, farklı değerler anlamına geldiğini bilmek geldi - Anlıyorum eğer doğru, yanlış olduğumda lütfen beni düzeltin. Ancak, aralarındaki farkı anlamıyorum. Her ikisi de çift anahtar değer çiftlerini saklamak için kullanılır. Farklı oldukları tek parça, uygulamalarında yani ArrayListMultimap
, bir Dizi ve LinkedListMultimap
bir LinkedList olarak uygulanmış mı? Ayrıca, performansta nasıl farklılıklar gösterirler? Biliyorum çok şey soruyorum ama bunun için başka nerede cevap bulacağımı bilmiyorum.ArrayListMultimap, LinkedListMultimap'ten nasıl farklıdır?
cevap
O ... docs ve kod içinde. Temel olarak zaten gördüğünüz bir farkın yanı sıra (List
uygulama seçimi), farklı bir Map
uygulaması da kullanıyorlar. Yani:
ArrayListMultimap
Harita içinHashMap
veArrayList
entries()
,asMap().keySet()
veyaasMap.entrySet()
tanımsız gibi yöntemlerin bu yineleme sırasını ifade eder cor toplama kullanır.ListMultimap
'un sade ve basit bir uygulamasıdır ve bununla başlamalıdır.al tüm anahtar değerini çiftlerini içeren bir bağlantılı liste kullanılarak korunur:
LinkedListMultimap
yukarıda sözü edilen yöntemlerin yineleme sırasını korumak için toplama ve özel bir veri yapısı (özel bağlantılı liste) içinLinkedList
kullanır. Buna ek olarak, "kardeş", belirli bir anahtar değerlerini ihtiva eden her bir ayrık bağlantılı hale getirilmiş listeler, bir dizi sabit zamanda ValueForKeyIterator uygulamak için kullanılır.Buna ek olarak "bağlantılı liste" korumak için birkaç diğer yapıları kullanan benzeri davranışı:
Ayrıcaprivate transient Node<K, V> head; // the head for all keys private transient Node<K, V> tail; // the tail for all keys private transient Multiset<K> keyCount; // the number of values for each key private transient Map<K, Node<K, V>> keyToKeyHead; // the head for a given key private transient Map<K, Node<K, V>> keyToKeyTail; // the tail for a given key
, bellek ayak izi bu Multimap
uygulamalarında kullanılan sırt koleksiyonlarından bir uzantısıdır - see this comparision (bugüne kadar% 100 olmayabilir).
ListMultimap<String, Integer> treeListMultimap =
MultimapBuilder.linkedHashKeys().arrayListValues().build();
: Şahsen
, ben verimli gerektiğinde, anahtarların tanımlanmış yineleme emriyle ListMultimap
değişken, ben (v16.0 beri Guava içindedir MultimapBuilder
ile oluşturulan,) ListMultimap
"Özel" kullanın v16.0 özel Multimap
s oluşturmadan önce
(Multimaps.newListMultimap
kullanarak) daha ayrıntılı olarak:
/**
* Creates {@link ListMultimap} preserving insertion order of keys and values
* (it's backed by {@link LinkedHashMap} and {@link ArrayList}).
*/
public static <K, V> ListMultimap<K, V> newLinkedArrayListMultimap() {
return Multimaps.newListMultimap(
Maps.<K, Collection<V>>newLinkedHashMap(),
new Supplier<List<V>>() {
@Override
public List<V> get() {
return Lists.newArrayList();
}
});
}
Çok teşekkürler! Bu gerçekten yardımcı olur. – TheRookierLearner
Harika cevap! – ycomp
- 1. nodejs nasıl akıcılıktan farklıdır?
- 2. Haritadan liste nasıl farklıdır?
- 3. path // nedir, nasıl farklıdır?/
- 4. GCC: marş, mtune'den nasıl farklıdır?
- 5. İlkel özyineleme "normal" tekrardan nasıl farklıdır?
- 6. Raylar: "email_field" "text_field" dan nasıl farklıdır?
- 7. OPENQUERY SELECT ve INSERT için nasıl farklıdır?
- 8. Hikaye panosu önizlemesi simülatörden farklıdır
- 9. SciPy interp1d sonuçları, MatLab interp1'den farklıdır
- 10. Bloklar, Objective-C'deki normal yöntemlerden ve işlevlerden nasıl farklıdır?
- 11. Dinamik Testler, JUnit 5'deki Parametreli Testlerden nasıl farklıdır?
- 12. IndexedDB, HTML5 yerel depolama biriminden kavramsal olarak nasıl farklıdır?
- 13. jQuery.each uygulaması, native Array.forEach öğesinden farklıdır
- 14. TCPDF QR Kodu her zaman farklıdır
- 15. Google uygun veri aynı cihazla aynı cihazdan farklıdır
- 16. Neden float.min C++ ve C# arasında farklıdır? C#
- 17. Standart kütüphane işlev adları neden Windows ve Linux arasında farklıdır?
- 18. Referans iki eşit derlemeler, yalnızca genel anahtarlar farklıdır
- 19. Animasyon hızı, beginAnimations ile animasyonlar bloğu arasında farklıdır
- 20. HTML kanvas koordinatları, HTML'ye gömülü olarak HTML kullanılarak oluşturulduğunda farklıdır
- 21. F11 ve F12 için Windows tarama kodları farklıdır. Niye ya?
- 22. Stdin'i bir dosyadan almak neden bir borudan almaktan farklıdır?
- 23. , arm-eaux-gcc'den farklı arm-linux-androideabi-gcc'den farklıdır
- 24. Yastık ile CMYK'dan RGB'ye dönüştürme, Photoshop uygulamasından farklıdır.
- 25. websocket, header connection-keep-alive = milyon ile http'dan farklıdır.
- 26. Dinamik yöntemler nelerdir ve DynamicMethod, MethodBuilder öğesinden farklıdır?
- 27. Google'ın OpenID tanımlayıcısı, "tüketici" alan adına bağlı olarak farklıdır. Alan adının değişmesi gerekiyorsa sorunlardan nasıl kaçınılır?
- 28. JVM GC günlüklerini almak için, nasıl -verbose: gc ve -XX: + PrintGCDetails farklıdır
- 29. Bir kod profilerinin içinde C# uygulamasının çalıştırılması bir dış kod profilerinin çalıştırılmasından nasıl farklıdır?
- 30. Ne .sdf dosyaları. .mdf dosyalarından nasıl farklıdır. Sql ile linq ile çalışır mı?
kimse bir 'LinkedListMultimap' (sadece bir 'ArrayListMultimap' karşılaştırıldığında) kullanışlı olduğunda iyi bir örnek var mı? _by örnek Kod demek istemiyorum - sadece bir durum_ – ycomp