单列集合元素通用遍历方式
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
单列集合包括List集合和Set集合,以下三种遍历方式均适用于List集合和Set集合。
(一)迭代器
Collection<String> c=...;
1.获取迭代器
Iterator<String> iter = c.iterator();
2.循环判断集合中是否还有元素
while(iter.hasNext())
3.调用next方法,取出元素
{
String str = iter.next();
System.out.println(str);//对元素进行操作
}
(二)增强for循环
简化迭代器的代码书写,本质上就是一个迭代器。
for(String s : c){
System.out.println(str);//对元素进行操作
}
(三)forEach方法
利用Collection中实现的Iterable接口中的forEach(Consumer<? super T> action)方法
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
List集合元素特有遍历方式
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove();
void set(E e);
void add(E e);
}
List集合是单列集合的一种,ListIterator为List集合特有的迭代器。List集合适用以上三种通用遍历方式,另外其还有特有的ListIterator迭代器方式,可以指定正序或倒序遍历。
(一)正序遍历
ListIterator<String> iterator1= list1.listIterator();
while(iterator1.hasNext()){
String s= iterator1.next();
System.out.println(s);
}
(二)倒序遍历
ListIterator<String> iterator2= list1.listIterator(list1.size());
while(iterator2.hasPrevious()){
String s= iterator2.previous();
System.out.println(s);
}
List集合在进行正序遍历和倒序遍历时要注意指针问题。
使用迭代器遍历集合过程中,不允许使用集合对象的添加或删除,否则会出现并发修改异常(ConcurrentModificationException);迭代过程中做删除可以使用Iterator自带的remove方法,做添加可以使用ListIterator自带的add方法。