快捷搜索:  汽车  科技

java集合循环遍历(java集合的遍历)

java集合循环遍历(java集合的遍历)coll.add(1);Collection coll = new ArrayList();//迭代变量代表的是每一个元素}示例:

集合的遍历

一、foreach迭代

Java 5 提供了 foreach 循环迭代访问 Collection

格式:

for(元素的类型 迭代变量 : 数组/集合名称){

//迭代变量代表的是每一个元素

}

示例:

Collection coll = new ArrayList();

coll.add(1);

coll.add(2);

coll.add(3);

coll.add(4);

for(Object obj : coll){

System.out.println(obj);

}

//foreach循环4次,obj每一次代表一个元素

注意:

foreach遍历只适用于查看/查找集合中的元素,不能在遍历集合时有任何影响集合中元素个数或数据的操作,否则操作结果将不确定。

for(Object obj : coll){

coll.remove(obj);//错误

}

二、Iterator迭代

1、迭代器概述

Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。

因为Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。

Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。

集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前

java集合循环遍历(java集合的遍历)(1)

在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。

如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,再调用remove都会报IllegalStateException

Iterator iter = coll.iterator();//多态引用 while(iter.hasNext()){ Object obj = iter.next(); System.out.println(obj); } Iterator iter = coll.iterator();//回到起点 while(iter.hasNext()){ Object obj = iter.next(); if(obj.equals("李四")){ iter.remove(); } }

注意:Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法

2、查看Iterator迭代器源码

概念:迭代器(iterator)有时又称为游标(cursor),提供一种方法访问一个容器(container)对象中各个元素,而又不需要暴露该对象的内部细节。

作用:是为容器遍历而生,用以方便的实现对容器内元素的遍历操作。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”,售票员关注公交车上的每个乘客。

java集合循环遍历(java集合的遍历)(2)

走到每个座位之前,看看是否有乘客,如果有检查该乘客,如果该乘客未购票,可以请他下车,也只能请刚刚检查过的乘客下车。

每一类集合都有自己的迭代器,迭代器是为对应的集合服务的,因此迭代器都是作为对应集合的内部类定义的。

示例:只摘取关键代码ArrayList的内部迭代器Itr

private class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element returned; -1 if no such public boolean hasNext() { return cursor != size; } public E next() { int i = cursor; cursor = i 1; return (E) elementData[lastRet = i]; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); try { ArrayList.this.remove(lastRet); cursor = lastRet; lastRet = -1; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } } public E remove(int index) { E oldValue = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData index 1 elementData index numMoved); elementData[--size] = null; // clear to let GC do its work return oldValue; }


往期内容:

数组与集合

Spring集合属性

java集合Collection接口

Collection集合框架和map

分布式与集群的区别

猜您喜欢: