天天看點

集合輸出

從JDK1.8開始Iterable接口中提供的用于集合輸出的forEach()方法使用較少,常用的四種集合輸出形式:Iterator疊代輸出、ListIterator雙向疊代輸出、Enumeration枚舉輸出、foreach輸出

1、Iterator疊代輸出

擷取Iterator接口對象:public Iterator<E> iterator​()

Iterator接口中定義的方法:

判斷是否有資料:public boolean hasNext​()

取出目前資料:public E next​()

删除:default void remove​()

在java.util.Scanner類中使用過上述方法,因為其就是Iterator接口的子類。

示例:

Set<String> all = Set.of("a","v","s") ;

Iterator<String> iter = all.iterator() ; //執行個體化Iterator對象

while(iter.hasNext()) {

    String str = iter.next() ;

    System.out.println(str) ;

}

【重要】對于Iterator接口中的remove()方法,在Collection接口中也定義有,但是在進行疊代輸出的過程中如果使用Collection接口中的remove()方法(all.remove("v"))會報并發更新異常“java.util.ConcurrentModificationException”,不能删除,是以要使用Iterator接口中的remove()方法:iter.remove() ;該方法會删除原始集合中的資料。

2、ListIterator雙向疊代輸出

使用Iterator進行的疊代輸出隻允許由前向後輸出,進行雙向疊代輸出必須依靠Iterator的子接口ListIterator實作。Collection接口中沒有定義擷取ListIterator接口對象的方法,但是List子接口中有,也就是說這個輸出接口是專門為List接口準備的。ListIterator接口中定義的新方法:

判斷是否有前一個元素:public boolean hasPrevious​()

擷取目前元素:public E previous​()

示例:

import java.util.ArrayList ;

import java.util.List ;

import java.util.ListIterator ;

public class JavaDemo {

    public static void main(String[] args) {

        List<String> all = new ArrayList<String>() ;

        all.add("a") ;

        all.add("v") ;

        all.add("s") ;

        ListIterator<String> iter = all.ListIterator() ;

        System.out.println("右前向後輸出:") ;

        while(iter.hasNext()) {

            System.out.println(iter.next()) ;

        }

        System.out.println("右後向前輸出:") ;

        while(iter.hasPrevious()) {

            System.out.println(iter.Previous()) ;

        }

    }

}

注意:要想實作由後向前周遊必須先實作右前向後周遊。

3、Enumeration枚舉輸出(JDK1.0)

該接口為Vector類服務,擷取Enumeration接口對象就需使用Vector類中的方法:public Enumeration<E> elements​()

Enumeration接口中定義的方法:

判斷是否有下一個元素:public boolean hasMoreElements​()

擷取目前元素:public E nextElement​()

4、foreach輸出

除了使用疊代接口實作輸出之外,從JDK1.5開始加強型for循環也可以實作集合的輸出

for(String str : all ) { System.out.println(str) ; } 

5、利用Iterator輸出Map集合

Map集合裡實際上儲存的是一組Map.Entry接口對象(裡面包裝的是key與value),即仍是單值的儲存,而Map集合中的方法:将全部的Map集合轉為Set集合:public Set<Map.Entry<K,V>> entrySet​()

集合輸出

示例:

public class JavaDemo {

    public static void main(String[] args) {

        Map<Sting,Integer> map = new HashMap<String,Integer>() ;

        map.put("one",1) ;

        map.put("two",2) ;

        map.put("three",3) ;

        Set<Map.Entry<Sting,Integer>> set = map.entrySet() ; //将Map集合變為Set集合

        //利用foreach輸出Map集合

        for(Map.Entry<String,Integer> entry : set) {

            System.out.println(entry.getKey()) ;

        }

        //利用Iterator輸出Map集合

        Iterator<Map.Entry<Sting,Integer>> iter = set.iterator() ;

        while(iter.hasNext()) {

            Map.Entry<String,Integer> me = iter.next() ;

            System.out.println(me.getKey()) ;

        }

    }

}