2012-06-19 45 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); 
}