1. 程式人生 > >增強型for迴圈與Map集合的遍歷

增強型for迴圈與Map集合的遍歷

Map介面的遍歷有以下幾種方法:
  1. 使用map.values()方法,先把value的值都放在一個Collection集合中。
  2. 使用map.entrySet()方法。
  3. 使用map.keySet()方法。
其實對於Map介面進行遍歷操作是很少的,通常對其都是進行查詢操作。 for-each迴圈在Java 5中被引入,所以該方法只能應用於Java 5或更高的版本中,在集合框架中發揮著重要的用處。



關於增強型for迴圈

語法格式:
for(集合內儲存型別 變數名 : 集合變數名)
舉例:

List<String> list = new ArrayList<
String>(); list.add("wang"); list.add("hong"); for(String str : list) System.out.println(str);

列印的結果是list集合中的資料


增強型for迴圈使用須知:

  1. 增強for迴圈只能用在陣列或實現Interable介面的集合類上
  2. 如果遍歷一個空的Map物件,for-each迴圈將丟擲NullPointerException異常
  3. 增強for迴圈和iterator遍歷的效果是一樣的,也就說增強for迴圈的內部也就是呼叫iteratoer實現的。但是增強for迴圈有些缺點,例如不能在增強迴圈裡動態的刪除集合內容。不能獲取下標等
  4. 增強型for迴圈只適合取資料,不會更改資料,如對更改資料有要求需要使用傳統for迴圈方式



關於Map集合的遍歷

Map集合沒有實現Interable介面,因此無法直接使用增強for迴圈,需要轉成相應的set集合,Map集合無法直接迭代
Map集合遍歷的傳統方式:

第一種方式:迭代

1.使用keySet()迭代

    @Test
public void test() {
    Map map = new HashMap();
    map.put("1","aaa");
    map.put("2","bbb");
    map.put("3","ccc");

    //迭代遍歷Map集合的第一種方式
Set set = map.keySet(); Iterator it = set.iterator(); while(it.hasNext()){ String key = (String) it.next(); String value = (String) map.get(key); System.out.println(key + "=" + value); } }

同時應注意,若使用HashMap()方法,在儲存資料的時候採用雜湊演算法進行儲存,因此在取資料時的列印輸出不會按照存入的順序,若對順序有要求,可以採用LinkedHashMap方法,採用線性連結串列儲存資料。

2.使用entrySet()迭代
Entry是一個鍵值對物件,包含key和value兩個屬性,可以通過getKey()獲得key值,也可以通過getValue()獲得value值。entrySet實現了Set介面,可以用以遍歷Map物件。

@Test
public void test() {
    Map map = new HashMap();
    map.put("1","aaa");
    map.put("2","bbb");
    map.put("3","ccc");

    //迭代遍歷Map集合的第二種方式
    Set set = map.entrySet();
    Iterator it = set.iterator();
    while(it.hasNext()){
        Entry entry = (Entry) it.next();
        String key = (String) entry.getKey();
        String value = (String) entry.getValue();
        System.out.println(key + "=" + value);
    }
}

第二種方式:增強型for迴圈

1.for迴圈&keySet()

    @Test
public void test() {
    Map map = new HashMap();
    map.put("1","aaa");
    map.put("2","bbb");
    map.put("3","ccc");

    //增強型for迴圈遍歷Map集合

    for(Object obj : map.keySet()) {
        String key = (String) obj;//取到每一個key值
        String value = (String) map.get(key);
        System.out.println(key + "=" + value);
    }
}

2.for迴圈&entrySet()

    @Test
public void test() {
    Map map = new HashMap();
    map.put("1","aaa");
    map.put("2","bbb");
    map.put("3","ccc");

    //增強型for迴圈遍歷Map集合

    for(Object obj : map.entrySet()) {
        Map.Entry entry = (Map.Entry) obj;
        String key = (String) entry.getKey();
        String value = (String) entry.getValue();
        System.out.println(key + "=" + value);
    }
}