私が最初にそれぞれの最後のために必要なのHashMapHashMapの最初の反復はどのくらいですか?
items = new HashMap<String, String>();
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
を持っています。
"C", "3"
"B", "2"
"A", "1"
私が最初にそれぞれの最後のために必要なのHashMapHashMapの最初の反復はどのくらいですか?
items = new HashMap<String, String>();
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
を持っています。
"C", "3"
"B", "2"
"A", "1"
編集:自分とマシューは、あなたの質問が意味するものとは明らかに異なる解釈をしています。あなたが挿入した逆順、またはキーの逆順を意味しますか?あなたはキーの順序を逆に意味場合
は、ここでそれを行う方法は次のとおりです。
はTreeMapのように、注文した地図を使用して、items.keySetを反復処理()。あなたのキー値の自然な順序によって
のTreeMapの種類、あなたは逆の順序でキーをソートするコンストラクタにコンパレータに渡す必要がありますので:
Map<String, String> items = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String a, String b) {
return b.compareTo(a);
}
});
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
for (String s: items.keySet()) {
System.out.println(s + " " + items.get(s));
}
このコードは同等です: '地図<文字列、文字列>のアイテム=新しいTreeMapを<文字列、文字列>(Collections.reverseOrder());' – barjak
クールああ - のコンテキストにある – iftheshoefritz
HashMapのはどんな順序を保証するものではありません。 LinkedHashMap
を使用すると、それは挿入によって注文されますが、それでもやり直すための便利な方法はまだありません。
items.entrySet()
に電話することもできます。それはSet<Map.Entry>
を返します。その後、セットのサイズを取得し、toArray()
を呼び出してから、下降forループを実行します。
別の方法 - あなたの鍵のにSortedSetを作成します:
import java.util.*;
class MyComparator implements Comparator<String> {
public int compare(String a, String b) {
return -a.compareTo(b);
}
public boolean equals(String a, String b) {
return a.equals(b);
}
}
public class test {
public static void main(String[] args) {
HashMap<String, String> items = new HashMap<String, String>();
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
TreeSet<String> ts = new TreeSet<String>(new MyComparator());
ts.addAll(items.keySet());
for(Iterator<String> i = ts.iterator(); i.hasNext();) {
String key = i.next();
System.out.println("key: " + key + ", value: " + items.get(key));
}
}
}
出力:
key: C, value: 3 key: B, value: 2 key: A, value: 1
NavigableMap
(TreeMap
はNavigableMap
)は、ナビゲーション機能を備えたSortedMap
です。
NavigableMap#descendingMap()
は、このマップに含まれるマッピングの逆順表示(コピーではありません)を返します。
例:
NavigableMap<String, String> items = new TreeMap<String, String>();
items.put("B", "2");
items.put("A", "1");
items.put("C", "3");
for (Map.Entry<String, String> e : items.entrySet()) {
System.out.println(e);
}
// gives
// A=1
// B=2
// C=3
for (Map.Entry<String, String> e : items.descendingMap().entrySet()) {
System.out.println(e);
}
// gives
// C=3
// B=2
// A=1
注:あなたがあなたのMap
のキーの自然順序付けを気にしている場合、この答えは有効です。挿入注文やアクセス注文について気になる場合は、LinkedHashMap
をご覧ください。
注2:あなたの質問では、HashMap
を使用しました。 HashMap
は、その要素の注文を保証しないことに注意してください。実際には、注文が時間の経過とともに一定に保たれることさえ保証されていません。詳細については、HashMap
のjavadocの最初の段落を参照してください。
「Last」と「First」という用語は、時間を表すように見えます。 LastとFirstが意味論的であると仮定した回答のほとんどは(例えば、CはAより大きく、したがってLastです)。挿入時間の順序が必要で、キーに挿入タイムスタンプがない場合、OrderedMapsは役に立ちません。 – extraneon
'HashMap'はその要素の順序を保証しません。特に、注文が時間の経過とともに一定であることを保証するものではありません。したがって、「HashMap」は、何らかの注文を維持しなければならない場合に必要なものではありません。 – barjak