2012-01-17 17 views
14

संभव डुप्लिकेट:
Iterating through a LinkedHashMap in reverse orderरिवर्स में लिंक्ड हैश मानचित्र को कैसे पार करें?

एक उलटे क्रम में लिंक्ड पार करने के लिए कैसे हैश मानचित्र? क्या ऐसा करने के लिए मानचित्र में कोई पूर्वनिर्धारित विधि है?

मैं इसे बना रहा हूं इस प्रकार है:

LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer,String>(); 
map.put(1, "one"); 
map.put(2, "two"); 
map.put(3, "three"); 
+3

देखें http://stackoverflow.com/questions/7170871/iterating-through-a-linkedhashmap-in-reverse-order –

उत्तर

12
List<Entry<Integer,String>> list = new ArrayList<>(map.entries()); 

for(int i = list.size() -1; i >= 0 ; i --){ 
    Entry<Integer,String> entry = list.get(i); 
} 

वास्तव में सुंदर नहीं और प्रवेश सेट है, जो यदि आपका नक्शा है प्रविष्टियों की एक महत्वपूर्ण संख्या एक हो सकता है की एक प्रति की कीमत पर मुसीबत।

उत्कृष्ट Guava library एक [List.reverse(List<>)][2] है कि आप अनुक्रमित पाश के बजाय प्रत्येक शैली पाश के लिए जावा 5 का उपयोग करने की अनुमति होगी:

//using guava 
for(Entry entry : Lists.reverse(list)){ 
    // much nicer 
} 
18

इस प्रयास करें यह रिवर्स प्रविष्टि क्रम में कुंजी प्रिंट होगा, :

ListIterator<Integer> iter = 
    new ArrayList<>(map.keySet()).listIterator(map.size()); 

while (iter.hasPrevious()) { 
    Integer key = iter.previous(); 
    System.out.println(key); 
} 

तुम भी प्रविष्टियों की रिवर्स प्रविष्टि आदेश से पुनरावृति कर सकते हैं:

+०१२३५१६४१०६
ListIterator<Map.Entry<Integer, String>> iter = 
    new ArrayList<>(map.entrySet()).listIterator(map.size()); 

while (iter.hasPrevious()) { 
    Map.Entry<Integer, String> entry = iter.previous(); 
    System.out.println(entry.getKey() + ":" + entry.getValue()); 
} 
+0

मैं डॉन ' टी सोचता है कि यह सूची के रूप में काम करेगा क्योंकि इटेटरेटर शुरू होता है इस प्रकार सूची की शुरुआत इस प्रकार है। पूर्व() पहली कॉल –

+3

@GarethDavis पर गलत होगा, आप गलत हैं, उपरोक्त सूची इटेटरेटर सूची के _end_ पर शुरू होता है - यही है 'listIterator (map.size()) 'करता है। –

+0

आह मैं देखता हूं, धन्यवाद। –

4

अमरूद नियम:

List<Object> reverseList = Lists.reverse(
     Lists.newArrayList(map.keySet())); 

Lists.reverse

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