欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马程序员_迭代器

程序员文章站 2022-06-14 12:26:17
...

------- 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());

}

}

}

 

 

相关标签: iterator