黑马程序员_迭代器
------- android培训、java培训、期待与您交流! ----------
迭代器(Iterator)
取出集合中的元素.
如何取出Collection 集合中的元素.
toArray(); 只能通过该方法将集合为数组,再遍历数组,取出元素. -> 不专业(面向对象)
如何取出List 集合中的元素
List 集合有角标的,可以通过get(int index) 取出元素
如何取出Set 集合中的元素.
该集合没有角标,没有get 方法, 只能通过toArray()方法将集合为数组,再遍历数组,取出元素.
在集合体系中缺乏一个统一的取出集合元素的方式... 虽然List 有get 方法,但是不能为集合通用的...
java集合体系,专业的设计了一个对象, 该对象专业的用于取出集合的元素, 该对象比较特殊,存在于集合的内部...
将该对象称之为迭代器对象.
接口:
Iterator -> 如何成为迭代器...
public boolean hasNext();
检测是否还有元素.
public Object next();
取出一个元素.
public void remove();
删除一个元素.
该接口,定义了迭代器的基本的规范. 只要是一个迭代器,就应该具备这些方法...
由于每一个集合类,都应该有一个迭代器可用. 在每一个集合类的内部,都存在一个成员内部类实现类该接口. 保证每一个集合类的迭代器对象都可以使用这些方法.
所谓的迭代器,存在于每一个集合类的内部,成员内部类.
接口:
Collection
...
public Iterator iterator(); -> 获取一个迭代器
迭代器类,是一个私有的成员内部类存在于集合类的内部, 如何有效的获取迭代器对象(私有成员内部类对象), 提供公共的方法获取.
由于每一个集合类,都应该有一个迭代器可用. 保证每一个集合类都应该具备一个公共的获取迭代器对象的方法... 如何保证? 将方法抽取到集合的顶层接口Collection中.
注意: 集合类不是直接实现类Iterator 接口, 集合类不是迭代器, 而是在集合类的内部类存在一个私有的成员内部类, 该类才是一个迭代器...
例子:
package cn.itcast.b_iterator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args) {
// test1();
// testRemove();
// 1. 迭代器.
ArrayList list = new ArrayList();
// 2. 添加元素.
list.add("jack");
list.add("rose");
list.add("lucy");
// 3. 获取迭代器.
Iterator it = list.iterator();
// while (it.hasNext()) {
// System.out.println(it.next());
//
// // 迭代时,同时使用了集合的方法往集合中添加元素...
// list.add("xxx");
// }
}
public static void testRemove() {
// 1. 迭代器.
ArrayList list = new ArrayList();
// 2. 添加元素.
list.add("jack");
list.add("rose");
list.add("lucy");
// 3.获取迭代器对象. iterator .
Iterator it = list.iterator();
// 4. 通过迭代器删除元素.
// 4.1 不能直接调用remove 方法,尝试删除迭代器的元素.IllegalStateException
// 4.2 调用remove 方法之前,先调用next 方法,取出被删除的这个元素,才能使用remove方法.
// System.out.println(it.next());
// it.remove();
// 5. 使用迭代器的remove 方法,删除集合中的所有的元素.
while (it.hasNext()) {
it.next();
it.remove();
}
System.out.println(list);
}
public static void test1() {
// 1. 迭代器.
Collection coll = new ArrayList();
// 2. 添加元素.
coll.add("jack");
coll.add("rose");
coll.add("lucy");
// 3.获取迭代器对象. iterator .
Iterator it = coll.iterator();
// 3.1 使用迭代器的方法
// // hasNext 检测集合中是否有元素.
// System.out.println(it.hasNext());
// System.out.println(it.next());
// System.out.println(it.hasNext());
// System.out.println(it.next());
// System.out.println(it.hasNext());
// System.out.println(it.next());
// System.out.println(it.hasNext());
// // 当hasNext 方法为false时,再次调用next方法. 会抛出NoSuchElementException 运行时异常.
// System.out.println(it.next());
// 3.2 迭代器的通用使用方式.
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
上一篇: 黑马程序员_迭代器