2014-08-31 67 views
0

我有這個輸出,它出來的順序相反。最後一個打印輸出是我想成爲第一個打印輸出。我怎樣才能扭轉它?它是一個HashMap。反向Map.key,map.value輸出

System.out.println(); 
      int c = 0; 
      System.out.print(newName + "= "); 
      for (Map.Entry<Integer, Integer> entry : result.entrySet()) { 

       System.out.print(entry.getValue() + "X^" + entry.getKey()); 
       c++; 
       if (c != result.size()) { 
        System.out.print("+"); 
       } 
+0

您使用過哪種類型的地圖? HashMap類? – Heejin 2014-08-31 17:14:13

+5

地圖一般來說沒有任何保證的順序。如果你想要一個特定的訂單,你應該自己排序輸出。另一方面,如果這是一個有排序的映射,則應該按照相反的順序進行排序。我們無法根據您在此處指定的內容來判斷。 – 2014-08-31 17:14:14

+0

我使用了一個HashMap – Dave 2014-08-31 17:15:47

回答

3

爲了保持插入訂單時迭代使用LinkedHashMap代替HashMap,並在反向去做到這一點:

List<Map.Entry<Integer, Integer>> entries = new ArrayList<>(result.entrySet()); 
Collections.reverse(entries); 

for (Map.Entry<Integer, Integer> entry : entries) { 
    // same body as before 
} 

或者,我們可以使用一個反向迭代:

List<Map.Entry<Integer, Integer>> entries = new ArrayList<>(result.entrySet()); 
ListIterator<Map.Entry<Integer, Integer>> iter = entries.listIterator(); 

while (iter.hasPrevious()) { 
    Map.Entry<Integer, Integer> entry = iter.previous(); 
    // same body as before 
} 
+0

這和以前一樣嗎? – Dave 2014-08-31 17:27:48

+0

@Dave我的意思是:在我的新循環內複製相同的循環體 – 2014-08-31 17:41:41

+0

確定第一個有點工作,但其中一個值仍然錯位。第二個似乎根本沒有工作。沒有打印輸出。 – Dave 2014-08-31 17:41:42