Java_集合輸出的四種形式
阿新 • • 發佈:2019-01-06
集合輸出一共有四種手段:Iterator、ListIterator、Enumeration、foreach
1.迭代輸出:Iterator
只要是Collection介面的子類物件,一定有一個iterator()取得Iterator物件,用於集合輸出。
在Iterator接口裡有三個抽象方法:
(1)判斷是否有下一個元素:public boolean hasNext();
(2)取得當前元素:public E next();
(3)刪除元素:public default void remove();
產生ConcurrentModificationException原因:modCount在Iterator中與原本的集合不一致。modCount指的是集合的修改次數,每次修改集合就會+1。
2.雙向迭代介面:ListIterator
此介面定義的方法:
(1)判斷是否有上一個元素:public boolean hasPrevious();
(2)取得上一個元素:public E previous();
·取得ListIterator介面物件:public ListIterator listIterator();
3.Enumeration列舉輸出
Enumeration的介面定義:
(1)判斷是否有下一個元素:public boolean hasMoreElements();
(2)取得元素:public E nextElement();
取得這個介面的例項化物件,只能夠依靠Vector子類。在Vector類中提供有一個取得Enumeration介面物件的方法:
public Enumeration elements()
1.迭代輸出:Iterator
只要是Collection介面的子類物件,一定有一個iterator()取得Iterator物件,用於集合輸出。
在Iterator接口裡有三個抽象方法:
(1)判斷是否有下一個元素:public boolean hasNext();
(2)取得當前元素:public E next();
(3)刪除元素:public default void remove();
如:Iterator使用
public class Test{ public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("A"); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String string = iterator.next(); System.out.println(string); } } }
如:刪除元素
如果在集合遍歷的時候(Iterator遍歷)修改集合元素,會產生ConcurrentModificationException,使用iterator.remove()則不會產生此異常。public class Test{ public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("A"); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String string = iterator.next(); if(string.equals("A")) { //使用集合提供的remove()方法,則會產生ConcurrentModificationException // list.remove("A"); //使用iterator的remove方法則不會產生異常 iterator.remove(); continue; } System.out.println(string); } } }
產生ConcurrentModificationException原因:modCount在Iterator中與原本的集合不一致。modCount指的是集合的修改次數,每次修改集合就會+1。
2.雙向迭代介面:ListIterator
此介面定義的方法:
(1)判斷是否有上一個元素:public boolean hasPrevious();
(2)取得上一個元素:public E previous();
·取得ListIterator介面物件:public ListIterator listIterator();
如:ListIterator介面使用
public class Test{
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("A");
list.add("B");
list.add("C");
ListIterator<String> listIterator = list.listIterator();
//從前向後輸出
while(listIterator.hasNext()) {
System.out.print(listIterator.next() + " ");
}
System.out.println();
//從後向前輸出
while(listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
}
}
注意:只有List接口才有。要想實現從後向前輸出,必須先從前向後輸出。3.Enumeration列舉輸出
Enumeration的介面定義:
(1)判斷是否有下一個元素:public boolean hasMoreElements();
(2)取得元素:public E nextElement();
取得這個介面的例項化物件,只能夠依靠Vector子類。在Vector類中提供有一個取得Enumeration介面物件的方法:
public Enumeration elements()
如:使用Enumeration輸出
public class Test{
public static void main(String[] args) {
Vector<String> vector = new Vector<>();
vector.add("A");
vector.add("A");
vector.add("B");
vector.add("C");
Enumeration<String> enumeration = vector.elements();
while(enumeration.hasMoreElements()) {
System.out.println(enumeration.nextElement());
}
}
}
4.foreach輸出如:使用foreach輸出
public class Test{
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("A");
list.add("B");
list.add("C");
for (String string : list) {
System.out.println(string);
}
}
}