我正在迭代哈希表,连接字符串值:
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("]");
我想颠倒迭代的顺序。
有可能吗?
答案 0 :(得分:9)
您也可以使用“Collections.reverse()”函数进行反转。 在Francisco Spaeth's示例之后,
List<String> list = new ArrayList<String>(jsonHashTableTemp.keySet());
Collections.reverse(list);
for (String value : list) {
jsonHashTableTemp.get(value);
}
答案 1 :(得分: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
这样的有序Hash已经评论过。
编辑:更正了内部循环l.get(i)
答案 2 :(得分:0)
如果您使用的是Hashtable或HashMap,则订单根本不受保证。它可能与运行不同。 如果要分别按插入顺序或自然顺序进行迭代,则应使用LinkedHashMap或TreeMap。 只有这样,您才可以使用已经建议的方法将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();