Java面接知識点(四十九)Map集合の遍歴
16684 ワード
Mapインタフェースには、3つのコレクションビューがあります.
(1)Set keyset():mapに含まれるすべてのkeyのSetビューを返します.
(2)Collection values():mapに含まれるすべてのvalueのCollectionビューを返します.
(3)Set>entrySet():mapクロックに含まれるすべてのマッピングのセットビューを返します.
1つ目:KeySet()
Mapのすべてのキーをsetセットに格納します.setは反復器を備えているからです.すべてのキーを反復的に取り出し、getメソッドに従います.各キーに対応する値を取得します.keySet():反復後はget()でのみkeyを取得できます.
取得した結果が乱順になるのは,データ行のプライマリ・キーを取得する際にHashMap.keySet()メソッドを用いたためであり,このメソッドが返すSet結果は,中のデータが乱順に排出されるためである.
典型的な使い方は以下の通りです.
2つ目:entrySet()
Set>entrySet()/このマッピングに含まれるマッピング関係のSetビューを返します.(1つの関係は1つのキー−値対である),すなわち(key−value)を1つの全体としてSet集合に1対1で格納する.Map.Entryはマッピング関係を表します.entrySet():反復後にe.getKey()、e.getValue()の2つの方法でkeyとvalueを取得できます.Entryインタフェースを返します.
典型的な使い方は以下の通りです.
第2の方法、すなわちentrySet()の方法を推奨し、効率が高い.keySetについては実際には2回,1回はiterator,1回はHashMapからkeyの対するvalueを取り出す.entrysetは初めて遍歴しただけで、keyとvalueをentryに入れたので、もうすぐです.2つの遍歴の遍歴時間の差はまだ明らかだ.
結果:listはiterator経由:0 1 2 3 4 4 4 4 5 6 7 8 9 mapはiterator経由:key:key 1 value:value 1 key:key 2 value:value 2 key:key 0 value:value 0 key:key 5 value:value 5 key:value 5 key:key 6 value:value 6 key:key 3 value:value 3 key:key 4 value:value 4 key 4 key:key 9 value:value 9 key:key 7 value:value 7 key:value 7 key:key 8 value:value:value 8 key 8 value:value:value 8 key 8 value:value:value 8 8
hashmap遍歴の結果は乱順であり,map集合ではtreemapが秩序化していることがわかる.
(1)Set keyset():mapに含まれるすべてのkeyのSetビューを返します.
(2)Collection values():mapに含まれるすべてのvalueのCollectionビューを返します.
(3)Set>entrySet():mapクロックに含まれるすべてのマッピングのセットビューを返します.
1つ目:KeySet()
Mapのすべてのキーをsetセットに格納します.setは反復器を備えているからです.すべてのキーを反復的に取り出し、getメソッドに従います.各キーに対応する値を取得します.keySet():反復後はget()でのみkeyを取得できます.
取得した結果が乱順になるのは,データ行のプライマリ・キーを取得する際にHashMap.keySet()メソッドを用いたためであり,このメソッドが返すSet結果は,中のデータが乱順に排出されるためである.
典型的な使い方は以下の通りです.
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");
// map set ,keyset()
Iterator it = map.keySet().iterator();
//
while(it.hasNext()){
Object key = it.next();
System.out.println(map.get(key));
}
2つ目:entrySet()
Set>entrySet()/このマッピングに含まれるマッピング関係のSetビューを返します.(1つの関係は1つのキー−値対である),すなわち(key−value)を1つの全体としてSet集合に1対1で格納する.Map.Entryはマッピング関係を表します.entrySet():反復後にe.getKey()、e.getValue()の2つの方法でkeyとvalueを取得できます.Entryインタフェースを返します.
典型的な使い方は以下の通りです.
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");
// map , set
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Entry e =(Entry) it.next();
System.out.println (" "+e.getKey () + " " + e.getValue ());
}
第2の方法、すなわちentrySet()の方法を推奨し、効率が高い.keySetについては実際には2回,1回はiterator,1回はHashMapからkeyの対するvalueを取り出す.entrysetは初めて遍歴しただけで、keyとvalueをentryに入れたので、もうすぐです.2つの遍歴の遍歴時間の差はまだ明らかだ.
public class MapIterator {
public static void listMethod() {
System.out.println("list iterator :");
List<Integer> list = new ArrayList<>();
for (int i=0; i<10; i++) {
list.add(i);
}
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println("");
}
public static void mapMethod() {
System.out.println("map iterator :");
Map<String,String> map = new HashMap<>();
for (int i=0; i<10; i++) {
map.put("key"+i,"value"+i);
}
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
System.out.println("key: "+entry.getKey()+" value: "+entry.getValue());
}
}
public static void main(String[] args) {
listMethod();
mapMethod();
}
}
結果:listはiterator経由:0 1 2 3 4 4 4 4 5 6 7 8 9 mapはiterator経由:key:key 1 value:value 1 key:key 2 value:value 2 key:key 0 value:value 0 key:key 5 value:value 5 key:value 5 key:key 6 value:value 6 key:key 3 value:value 3 key:key 4 value:value 4 key 4 key:key 9 value:value 9 key:key 7 value:value 7 key:value 7 key:key 8 value:value:value 8 key 8 value:value:value 8 key 8 value:value:value 8 8
hashmap遍歴の結果は乱順であり,map集合ではtreemapが秩序化していることがわかる.