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、リストに追加して、次のような単純な方法で繰り返すことができます。

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を使用している場合、注文はまったく保証されません。実行ごとに異なる場合があります。挿入順序または自然順序でそれぞれ反復する場合は、 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();
于 2012-06-19T09:37:53.327 に答える