Java:反转哈希表键集上的迭代顺序。怎么用?

Java:反转哈希表键集上的迭代顺序。怎么用?,java,hashtable,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());

我在哈希表上迭代,将字符串值连接起来:

    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("]");
Iterator it=jsonHashtableTemp.keySet().Iterator();
字符串json=新字符串(“[”);
while(it.hasNext()){
字符串s=it.next();
json=json.concat(jsonHashtableTemp.get.toString());
if(it.hasNext()){
json=json.concat(“,”);
}
}
json=json.concat(“]”);
我想反转迭代的顺序


有可能吗?

您无法使用,但您可以将其添加到列表中,并使用以下简单方法进行迭代:

List<String> l = new ArrayList<String>(jsonHashTableTemp.keySet());
for (int i = l.size()-1; i >= 0; i--) {
   jsonHashTableTemp.get(l.get(i));
}
listl=newarraylist(jsonHashTableTemp.keySet());
对于(int i=l.size()-1;i>=0;i--){
jsonHashTableTemp.get(l.get(i));
}
如果您使用的是某种有序散列,如前面所述的
LinkedHashMap
,那么这就很有意义了


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

如果使用哈希表或哈希映射,则根本不保证顺序。每跑一次可能会有所不同。 如果要分别按插入顺序或自然顺序进行迭代,则应使用或。 只有这样,您才能使用已经建议的方法将keySet()复制到ArrayList中并向后迭代

注意:应该使用而不是串联字符串。否则,您将看到大型数据集的性能受到影响

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();
StringBuilder jsonSB=new StringBuilder();
jsonSB.append(“[”);
List l=新的ArrayList(jsonHashTableTemp.keySet());
对于(int i=l.size()-1;i>=0;i--){
append(jsonHashTableTemp.get(l.get(i));
jsonSB.append(“,”);
}
jsonSB.append(“]”);
字符串json=jsonSB.toString();

您也可以使用“Collections.reverse()”函数进行反转。 以身作则,

List List=newarraylist(jsonHashTableTemp.keySet());
收款。反向(列表);
for(字符串值:列表){
jsonHashTableTemp.get(值);
}

除非您使用的是
LinkedHashMap
,否则您首先无法获得可预测的迭代顺序,因此反转它对您没有多大好处。请将密钥集放入新的ArrayList中,然后反向迭代。
List<String> list = new ArrayList<String>(jsonHashTableTemp.keySet());

Collections.reverse(list);

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