1. 程式人生 > >遍歷集合方法總結

遍歷集合方法總結

args iterators ext bsp 分享圖片 for 而不是 實例 底層

遍歷List方法一:普通的for循環

for(int i=0;i<list.size();i++){
    String temp=(Stirng)get(i);
    System.out.println(temp);
}  

遍歷List方法二:增強for循環(使用泛型)

for(String temp:list){
    System.out.println(temp);
        }

遍歷List方法三:使用iterator叠代器(1)

for(Iterator<Integer> iter=list.iterator();iter.hasNext();){
            Integer temp
= iter.next(); System.out.println(temp); }

遍歷List方法三:使用iterator叠代器(2)

Iterator iter=list.iterator();
while(iter.next()){
    Object obj=iter.next();
    iter.remove();//讀取一個刪除一個
    System.out.println(obj);
        }

Set遍歷方法一:增強for循環

for(String temp:set){
    System.out.println(temp);
        }

Set遍歷方法二:使用iterator叠代器(1)

for(Iterator<Integer> iter=set.iterator();iter.hasNext();){
            Integer temp= iter.next();
            System.out.println(temp);
        }

遍歷Map方法一:使用entrySet

for(Iterator<Map.Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){
            Map.Entry
<Integer,String> temp=iter.next(); System.out.println(temp); }

遍歷Map方法二:根據key獲取value

for (Iterator<Integer> iter = ss.iterator(); iter.hasNext(); ) {
            Integer temp = iter.next();
            System.out.println(temp);
        }

這裏for循環和增強for循環比較常見,所以著重講解一下Iterator叠代器實現遍歷List、Set、Map

首先從Iterator源碼分析:

技術分享圖片

Iterator源碼成員方法:hasNext();

技術分享圖片

如果叠代有更多元素,則返回{@code true}。(換句話說,如果{@link #next}將返回一個元素而不是拋出異常,則返回{@code true}。)。

next();

技術分享圖片


返回叠代中的下一個元素。 @return叠代中的下一個元素@throws NoSuchElementException如果叠代沒有更多的元素。

remove();

技術分享圖片

從底層集合中刪除此叠代器返回的最後一個元素(可選操作)。每次調用{@link #next}時,此方法只能調用。如果在叠代正在進行中以除調用此*方法之外的任何方式修改基礎集合,則未指定叠代器*的行為。 @implSpec 默認實現拋出 {@link UnsupportedOperationException}的實例,不執行任何其他操作。@throws UnsupportedOperationException如果此叠代器不支持{@code remove} 操作@throws IllegalStateException如果{@code next}方法尚未被調用,或者{@code remove}方法已經在最後一次調用{@code next} 方法後被調用。


而又因為在List、Set、Map源碼中都有erator<E> iterator();如果此列表包含指定的元素,則返回true 。更正式地,返回 true當且僅當此列表包含至少一個元素e 時,以適當的順序返回此列表中元素的叠代器。以正確的順序返回此列表中元素的叠代器。

下面為示例:

package jihe;

import java.util.*;

/**
 * 測試叠代器Iterator遍歷List,Set,Map
 * author Gsan
 */
public class TestIterator {
    public static void main(String[] args){
        testIteratorList();
        System.out.println("+++++++++++++++++++++++++++++");
        testIteratorSet();
        System.out.println("+++++++++++++++++++++++++++++");
        testIteratorMap1();
        System.out.println("+++++++++++++++++++++++++++++");
        testIteratorMap2();
    }

    public static void testIteratorList(){
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(2);

        for(Iterator<Integer> iter=list.iterator();iter.hasNext();){
            Integer temp= iter.next();
            System.out.println(temp);
        }

    }

    public static void testIteratorSet(){
        Set<String> set=new HashSet();
        set.add("aa");
        set.add("bb");
        set.add("cc");

        for(Iterator<String> iter=set.iterator();iter.hasNext();){
            String temp=iter.next();
            System.out.println(temp);
        }
    }

    //Map第一種遍歷方法
    public static void testIteratorMap1(){
        Map<Integer,String> map=new HashMap<>();
        map.put(100,"張三");
        map.put(60,"李四");
        map.put(200,"趙六");

        //將Entry中的key和value集成集合
        Set<Map.Entry<Integer, String>> ss=map.entrySet();

        for(Iterator<Map.Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){
            Map.Entry<Integer,String> temp=iter.next();
            System.out.println(temp);
        }
    }

    //Map第二種遍歷方法
    public static void testIteratorMap2() {
        Map<Integer, String> map = new HashMap<>();
        map.put(100, "張三");
        map.put(60, "李四");
        map.put(200, "趙六");

        //將Entry中的key集成集合
        Set<Integer> ss = map.keySet();

        for (Iterator<Integer> iter = ss.iterator(); iter.hasNext(); ) {
            Integer temp = iter.next();
            System.out.println(temp);
        }
    }
}

運行結果:

技術分享圖片

遍歷集合方法總結