集合输出一共有四种手段: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);
}
}
}
如:删除元素
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);
}
}
}
如果在集合遍历的时候(Iterator遍历)修改集合元素,会产生ConcurrentModificationException,使用iterator.remove()则不会产生此异常。 产生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);
}
}
}