Java:在哈希表keySet上反转迭代的顺序。怎么样?

时间:2012-06-19 08:54:24

标签: java hashtable

我正在迭代哈希表,连接字符串值:

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

我想颠倒迭代的顺序。

有可能吗?

3 个答案:

答案 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,则订单根本不受保证。它可能与运行不同。 如果要分别按插入顺序或自然顺序进行迭代,则应使用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();