2014-12-04 6 views
8
public class MultiMap_Test { 
    public static void main(String[] args) { 
     Multimap<String, String> myMultimap = ArrayListMultimap.create(); 

      myMultimap.put("classlabel", "tid"); 
      myMultimap.put("Y", "1"); 
      myMultimap.put("Y", "2"); 
      myMultimap.put("N", "4"); 

      // Iterating over entire MutliMap 
      for(String value : myMultimap.values()) {   
       System.out.print(value); 
      } 
    } 
} 

उपरोक्त कोड 1 2 tid 4 प्रिंट करता है।मल्टीमैप में सम्मिलन आदेश संरक्षित क्यों नहीं है?

मुझे समझ में नहीं आता कि यह tid 1 2 4 क्यों प्रिंट नहीं कर रहा है।

+5

मानचित्र आइटम का ऑर्डर नहीं रखते हैं। – DejaVuSansMono

+0

यह 'मल्टीमैप' का अनुबंध है ... यह क्वेरी-इन प्रदर्शनों के लिए भुगतान करने की कीमत है। –

+0

एक विकल्प 'मानचित्र <स्ट्रिंग, सूची >' का उपयोग करना है। इससे आपको सम्मिलित संपत्ति मिल जाएगी। – merlin2011

उत्तर

14

उपयोग LinkedListMultimap आप प्रविष्टि आदेश में रखना चाहते हैं के बजाय यदि:

Multimap<String, String> myMultimap = LinkedListMultimap.create(); 
+0

क्या LinkedListMultimap डुप्लिकेट कुंजी की अनुमति देता है? – vikramvi

2

प्रविष्टि आदेश मल्टीमैप में संरक्षित क्यों नहीं है?

वास्तव में, आपकी समस्या MultiMap साथ नहीं है लेकिन उसका चयन कार्यान्वयन के साथ है।

public static <K, V> ArrayListMultimap<K, V> create() { 
    return new ArrayListMultimap<K, V>(); 
} 

//... 

private ArrayListMultimap() { 
    super(new HashMap<K, Collection<V>>()); 
    expectedValuesPerKey = DEFAULT_VALUES_PER_KEY; 
} 

और HashMap तत्वों की प्रविष्टि के आदेश की रक्षा नहीं करता है: ArrayListMultimap समर्थन Map<K, Collection<V>> के कार्यान्वयन के रूप में एक HashMap<K, Collection<V>> उपयोग करता है।

संबंधित मुद्दे