2012-06-19 47 views
2

我迭代上的哈希表,鏈接該字符串值:Java:顛倒散列表keySet上迭代的順序。怎麼樣?

Iterator<String> it = jsonHashtableTemp.keySet().iterator(); 
    String json = new String("["); 
    while (it.hasNext()) { 
     String s = it.next(); 
     json = json.concat(jsonHashtableTemp.get(s).toString()); 
     if (it.hasNext()) { 
      json = json.concat(", "); 
     } 
    } 
    json = json.concat("]"); 

我會扭轉迭代的順序。

可能嗎?

+10

除非你使用'LinkedHashMap',你不會得到在第一時間可預測迭代順序,所以倒車它不會做你多好。 – beerbajay

+0

將keySet放入一個新的ArrayList中,然後遍歷它。 – Thilo

回答

5

您不能使用Iterator做到這一點,但你可以把它用一個簡單的添加到列表和重複它是這樣的:

List<String> l = new ArrayList<String>(jsonHashTableTemp.keySet()); 
for (int i = l.size()-1; i >= 0; i--) { 
    jsonHashTableTemp.get(l.get(i)); 
} 

,這使得萬一你使用的是一些感已訂購哈希像LinkedHashMap已經評論。

編輯:如果您使用的是哈希表或HashMap中的順序沒有guarantied都糾正了l.get(i)內環

0

。它可能與跑步跑步不同。 如果您要分別對廣告訂單或自然順序進行迭代,則應使用LinkedHashMapTreeMap。 只有這樣你才能使用已經建議的方法將keySet()複製到ArrayList中並向後迭代。

注意:您應該使用StringBuilder而不是拼接字符串。否則,你會看到一個大數據集的性能。

StringBuilder jsonSB = new StringBuilder(); 
jsonSB.append("["); 
List<String> l = new ArrayList<String>(jsonHashTableTemp.keySet()); 
for (int i = l.size() - 1; i >= 0; i--) { 
    jsonSB.append(jsonHashTableTemp.get(l.get(i))); 
    jsonSB.append(", "); 
} 
jsonSB.append("]"); 
String json = jsonSB.toString(); 
7

您也可以使用「Collections.reverse()」函數進行反轉。 繼Francisco Spaeth's例如,

List<String> list = new ArrayList<String>(jsonHashTableTemp.keySet()); 

Collections.reverse(list); 

for (String value : list) { 
    jsonHashTableTemp.get(value); 
}