3

我在一个哈希表上迭代,连接字符串值:

    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("]");

我会颠倒迭代的顺序。

是否可以?

4

3 回答 3

9

您也可以使用“Collections.reverse()”函数进行反转。仿效弗朗西斯科·斯派思的例子,

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

Collections.reverse(list);

for (String value : list) {
   jsonHashTableTemp.get(value);
}
于 2012-10-24T11:09:45.290 回答
5

您无法使用 来执行此操作Iterator,但您可以将其添加到列表中并使用简单的 for 迭代它,如下所示:

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

这是有道理的,以防万一您使用一些像LinkedHashMap已经评论过的有序哈希。

编辑:更正了l.get(i)内部循环

于 2012-06-19T08:59:03.847 回答
1

如果您使用的是 Hashtable 或 HashMap,则根本无法保证顺序。每次运行可能会有所不同。如果要分别按插入顺序或自然顺序进行迭代,则应使用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();
于 2012-06-19T09:37:53.327 回答