Java面接知識点(四十九)Map集合の遍歴


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結果は,中のデータが乱順に排出されるためである.
典型的な使い方は以下の通りです.
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が秩序化していることがわかる.