`
IT_nice
  • 浏览: 7927 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_迭代器

阅读更多

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

}

}

}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics