HashMap の最初と 2 番目の要素に別々にアクセスできますか? つまり、HashMap がある場合
Map<Integer, Integer> testMap = new HashMap<Integer, Integer>();
int f = testMap.first();
そのような機能がないことは知っていますが、どうすればその要素にアクセスできますか?
HashMap
秩序を保っていません。
このクラスは、マップの順序を保証しません。特に、順序が長期的に一定であることを保証するものではありません。
LinkedHashMap
挿入順序を維持する which または を使用できますTreeMap
。
この実装が HashMap と異なる点は、そのすべてのエントリを実行する二重リンク リストを維持することです。この連結リストは反復順序を定義します。これは通常、キーがマップに挿入された順序 (挿入順序) です。キーがマップに再挿入されても、挿入順序は影響を受けないことに注意してください。(呼び出しの直前に m.containsKey(k) が true を返すときに m.put(k, v) が呼び出された場合、キー k はマップ m に再挿入されます。)
マップは、使用されるコンストラクターに応じて、キーの自然順序付けに従って、またはComparator
マップ作成時に指定された によってソートされます。
Iterator it = testMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
System.out.println("Key"+pairse.getKey());
System.out.println("Value"+pairs.getValue());
}
とのLinkedHashMap
ようなメソッドを持つ which を使用できます。ただし、2番目のキーについては、反復する必要があり、キーがマップに入力された順序で要素を取得しますfirstKey
lastKey
HashMap <Integer, Integer> testMap = new HashMap <Integer, Integer> ();
testMap.put (1, 2);
testMap.put (2, 3);
Iterator <Integer> i = testMap.values ().iterator ();
System.out.println ("First element: " + i.next ());
System.out.println ("Second element: " + i.next ());
HashMap
要素が追加された順序を記憶していないため、「最初の要素」は必ずしも「最初に追加された」という意味ではないことに注意してください。
マップは順序付けされていないため、「最初のエントリ」などはありません。また、マップ (または HashMap) にインデックスによる取得メソッドがないのもそのためです。
あなたはこれを行うことができます:
Map<Integer, Integer> map = ...; // wherever you get this from
// Get the first entry that the iterator returns
Map.Entry<Integer, Integer> entry = map.entrySet().iterator().next();
(Note: Checking for an empty map omitted).
あなたのコードはマップ内のすべてのエントリを取得するわけではありません。見つかった最初のエントリですぐに返されます (そしてループから抜け出します)。
注: 呼び出しiterator()
は、マップ全体を反復処理していることを意味するものではありません。
番号。HapMap/HashTable として、キーと値を保持するエントリ ( http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html )にデータを格納することはできません。一緒。
いつでも entrySet() の Iterator を取得してエントリにアクセスできます。または、キーのセットのみを返す keySet() を取得してみてください。
お役に立てれば。