遍歷Collection集合中的6種方法

下面的代碼演示了遍歷Collection集合的6種方法,注意Collection集合的遍歷遠不止於增強for循環和迭代器兩種。

Java代碼如下所示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;

public class ListTest {

    public static void main(String[] args) {       
        String[] s="how are you I am fine".split(" ");
        List<String> list = Arrays.asList(s);
        /**
         * 第一種方法用增強for循環。(這裏List之所以能用增強for循環其原因在於它實現了Iterable接口)
         * 使用for循環的前提是帶泛型的list
         */
        for(String str:list){
            System.out.print(str+" ");
        }
        System.out.println();
        System.out.println("************");

        List listone = new ArrayList();
        listone.add("Java瘋狂講義");
        listone.add("Java EE企業應用實戰");
        listone.add("數據結構");

        //以下for不能遍歷testone中的元素,for循環遍歷時一定是泛型
//        for(String str1:listone){
//            System.out.print(str1+" ");
//        }

        /**
         * 第二種方法用Iterator
         */
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String next = it.next();
            System.out.print(next+" ");
        }
        System.out.println();
        System.out.println("************");
        /**
         * 第三種方法主要針對LinkedList。因爲LinkedList 既有棧(stack)的特點,又有隊列(Queue)
         * 的特點。所以遍歷LinkedList中的元素。根據stack和queue,可以進行相關的遍歷。
         * 遍歷的方法如下所示:
         */
        //Using linkedList as a stack
        LinkedList<String> list2=new LinkedList<>(list);//創建一個LinkeList包含list中的全部元素。
        while(!list2.isEmpty()){
            System.out.print(list2.removeFirst()+" ");
        }
        System.out.println();
        System.out.println("************");
        /**
         * Using linkedList as a queue
         */
        LinkedList<String> list3=new LinkedList<>(list);
        while(list3.peek() != null){
            System.out.print(list3.poll()+" ");
        }
        System.out.println();
        System.out.println("************");
        /**
         * 第四種方法把所有的Collection都可以當做Enumeration進行遍歷
         * Collections.enumeration(c)
         */
        ArrayList<String> list4=new ArrayList<>(list);
        Enumeration<String> e = Collections.enumeration(list4);
        while(e.hasMoreElements()){
            System.out.print(e.nextElement()+" ");
        }
        /**第五種方法
         * 當然還有其他方法如:
         */
        System.out.println();
        System.out.println("************");
        for(int i=0;i<list4.size();i++){
            System.out.print(list4.get(i)+" ");
        }
        System.out.println();
        System.out.println("************");
        /**第六種方法:
         *再如:
         */
        while(!list4.isEmpty()){
            int index=0;
            System.out.print(    list4.remove(index++)+" ");
        }
        /**
         * 備註:在List接口中的所有實現類中最常用的是ArrayList   LinkedList  
         * ArraList比LinkedList的速度快,一般情況下選中ArrayList的情況比LinkedList多。
         * 在ArrayList源碼中有一個serialVersionUID,這個數字保證了,
         * 寫入文件(ObjectOutputStream.writeObject(Object))
         * 讀取文件(ObjectInputStream.readObject())可以順利進行,
         * 並且指明這個數字,可以保持各個版本的兼容性。有利於文件傳輸。
         */   
    }
}
輸出結果如下:
how are you I am fine 
************
how are you I am fine 
************
how are you I am fine 
************
how are you I am fine 
************
how are you I am fine 
************
how are you I am fine 
************
how are you I am fine 
發佈了101 篇原創文章 · 獲贊 139 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章