(一)集合的輸出java
在類集中提供瞭如下四種的常見輸出方式:數組
Iterator:迭代輸出,是使用最多的輸出方式;spa
ListIterator:是Iterator的子接口,專門用於輸出List中的內容;code
Enumeration:是一箇舊的接口,功能與Iterator相似;blog
foreach:JDK 1.5以後提供的新功能,能夠輸出數組或集合。索引
(二)Iterator接口簡介接口
2.1 Iterator接口操做原理rem
集合輸出的標準操做: 「在使用集合輸出的時候必須造成如下的一個思路:‘只要是碰到了集合輸出的操做,就必定使用Iterator接口’,由於這是最標準的作法」it
Iterator接口的操做原理: Iterator是專門的迭代輸出接口,所謂的迭代輸出就是將元素一個個進行判斷,判斷其是否有內容,若是有內容則把內容取出。io
2.2 Iterator接口中的經常使用方法
No. |
方法 |
類型 |
描述 |
1 |
public boolean hasNext() |
普通 |
判斷是否有下一個值 |
2 |
public E next() |
普通 |
取出當前元素 |
3 |
public void remove() |
普通 |
移除當前元素 |
實例操做一:輸出Collection中的所有內容
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorDemo01 { public static void main(String[] args) { List<String> all = new ArrayList<String>();// 實例化List接口 all.add("I"); // 增長元素 all.add("_"); // 增長元素 all.add("love"); // 增長元素 all.add("_"); // 增長元素 all.add("you"); // 增長元素 Iterator<String> iter = all.iterator(); // 直接實例化Iterator接口S while (iter.hasNext()) { // 依次判斷 System.out.print(iter.next() + "、");// 輸出內容 } } }
操做二:使用Iterator刪除指定內容
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorDemo02 { public static void main(String[] args) { List<String> all = new ArrayList<String>();// 實例化List接口 all.add("I"); // 增長元素 all.add("_"); // 增長元素 all.add("love"); // 增長元素 all.add("_"); // 增長元素 all.add("you"); // 增長元素 Iterator<String> iter = all.iterator(); // 直接實例化Iterator接口S while (iter.hasNext()){ // 依次判斷 String str=iter.next(); if("_".equals(str)){ iter.remove(); } else{ System.out.print(str + "、");// 輸出內容 } } System.out.println("\n刪除以後的集合:"+all); } }
迭代輸出時刪除元素的注意點:
正常狀況下,一個集合要把內容交給Iterator輸出,可是集合操做中也存在一個remove()方法,若是在使用Iterator輸出時,集合本身調用了刪除方法,則會出現運行時的錯誤。
不正確的刪除方法:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorDemo03 { public static void main(String[] args) { List<String> all = new ArrayList<String>(); // 實例化List接口 all.add("I"); // 增長元素 all.add("_"); // 增長元素 all.add("love"); // 增長元素 all.add("_"); // 增長元素 all.add("you"); // 增長元素 Iterator<String> iter = all.iterator(); // 直接實例化Iterator接口S while (iter.hasNext()) { String str = iter.next(); // 取出內容 if ("_".equals(str)) { // 判斷內容是不是「_」 all.remove(str); // 刪除當前元素,使用集合刪除 (使用集合刪除,這裏就有問題,出現異常) } else { System.out.print(str + "、"); // 輸出元素內容 } } System.out.println("\n刪除以後的集合:" + all); // 輸出集合內容,調用toString()方法 } }
2.3 ListIterator接口
Iterator接口的主要功能是由前向後單向輸出,而此時若是想實現由後向前或是由前向後的雙向輸出,則就必須使用Iterator的子接口 —— ListIterator。 ListIterator接口定義以下: public interface ListIterator<E> extends Iterator<E>
2.3.1 ListIterator接口中的經常使用方法
No. |
方法 |
類型 |
描述 |
1 |
public boolean hasNext() |
普通 |
判斷是否有下一個值 |
2 |
public E next() |
普通 |
取出當前元素 |
3 |
public void remove() |
普通 |
移除當前元素 |
4 |
public void add(E o) |
普通 |
將指定元素增長集合 |
5 |
public boolean hasPrevious() |
普通 |
判斷是否有上一個元素 |
6 |
public E previous() |
普通 |
取出當前元素 |
7 |
public int nextIndex() |
普通 |
返回下一個元素的索引號 |
8 |
public int previousIndex() |
普通 |
返回上一個元素的索引號 |
9 |
public void set(E o) |
普通 |
替換元素 |
區別於Iterator:
與Iterator接口不一樣的是,ListIterator接口只能經過List接口實例化,即:只能輸出List接口中的內容。在List接口中定義了能夠爲ListIterator接口的實例化方法: public ListIterator<E> listIterator()
實例操做一:進行雙向迭代
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListIteratorDemo01 { public static void main(String[] args) { List<String> all = new ArrayList<String>(); // 實例化List接口 all.add("I"); // 增長元素 all.add("_"); // 增長元素 all.add("love"); // 增長元素 all.add("_"); // 增長元素 all.add("you"); // 增長元素 ListIterator<String> iter = all.listIterator();// 實例化ListIterator接口 System.out.print("由前向後輸出:"); // 輸出信息 while (iter.hasNext()) { // 由前向後輸出 String str = iter.next(); // 取出內容 System.out.print(str + "、"); // 輸出內容 } System.out.print("\n由後向前輸出:"); // 輸出信息 while (iter.hasPrevious()) { // 由前向後輸出 String str = iter.previous(); // 取出內容 System.out.print(str + "、"); // 輸出內容 } }}
實例操做二:增長及替換元素
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListIteratorDemo02 { public static void main(String[] args) { List<String> all = new ArrayList<String>(); // 實例化List接口 all.add("I"); // 增長元素 all.add("_"); // 增長元素 all.add("love"); // 增長元素 all.add("_"); // 增長元素 all.add("you"); // 增長元素 ListIterator<String> iter = all.listIterator(); // 實例化ListIterator接口 System.out.print("由前向後輸出:"); // 信息輸出 while (iter.hasNext()) { // 由前向後輸出 String str = iter.next(); // 取出內容 System.out.print(str + "、"); // 輸出內容 iter.set("yes-" + str); // 替換元素 } System.out.print("\n由後向前輸出:"); // 信息輸出 iter.add("do"); // 增長元素 while (iter.hasPrevious()) { // 由前向後輸出 String str = iter.previous(); // 取出內容 System.out.print(str + "、"); // 輸出內容 } } }