博学谷——让IT教学更简单,让IT学习更有效
}
}
List list = new ArrayList(); list.add(\list.add(\list.add(\list.add(\
ListIterator lit = list.listIterator(); while (lit.hasNext()) { }
// 逆向遍历集合
System.out.println(\以下是逆向遍历\while (lit.hasPrevious()) { }
System.out.println(lit.previous()); Object o = lit.next();
// 遍历到abc4元素时,向集合中添加一个元素 if (\ }
System.out.println(o);
lit.add(\
运行结果如图7-9所示。
图7-9 运行结果
三、案例总结
1、ListIterator迭代器的特有方法,如表7-3所示。
表7-3 ListIterator迭代器的特有方法 方法声明 void add(Object o) boolean hasPrevious() Object previous() void remove() 功能描述 将指定的元素插入列表(可选操作) 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true 返回列表中的前一个元素 从列表中移除由 next 或 previous 返回的最后一个元素(可选操作) 2、在本案例中,使用hasPrevious()方法判断是否存在上一个元素,如果存在,则通过previous()方法将元素取出,否则,则表示到达了集合的末尾,没有要遍历的元素。
3、在遍历过程中,如果想增加元素同样不能调用集合对象的add()方法,此时需要使用ListIterator提
11
博学谷——让IT教学更简单,让IT学习更有效
供的add()方法,否则会出现并发修改异常ConcurrentModificationException。需要注意的是,ListIterator迭代器只能用于List集合。
案例7-8 用Enumeration迭代Vector集合
一、案例描述
1、 考核知识点
编号:00107009
名称:Enumeration接口
2、 练习目标
? 掌握如何使用Enumeration迭代器的特有方法遍历Vector集合中的元素
3、 需求分析
在JDK1.2以前还没有Iterator接口的时候,遍历集合需要使用Enumeration迭代器接口。由于很多程序中依然在使用Enumeration,因此了解该接口的用法是很有必要的。Vevtor集合是List接口的一个实现类。为了让初学者能熟悉Enumeration迭代器的用法,本案例将演示如何用Enumeration迭代器遍历Vector集合。
4、 设计思路(实现原理)
1) 编写一个类Example08,在该类中定义一个Vector集合v 2) 向集合v中添加四个元素
3) 用Enumeration迭代器遍历集合v,输出集合中的每一个元素
二、案例实现
import java.util.*; public class Example08 { }
public static void main(String[] args) { }
Vector v = new Vector(); //创建Vector集合 v.addElement(\秦始皇\v.addElement(\成吉思汗\v.addElement(\朱元璋\v.addElement(\李世民\
Enumeration e = v.elements();
while (e.hasMoreElements()) { //Enumeration迭代器遍历Vector集合 }
String name = (String) e.nextElement(); System.out.println(name);
运行结果如图7-10所示。
12
博学谷——让IT教学更简单,让IT学习更有效
图7-10 运行结果
三、案例总结
1、JDK中提供了一个Vevtor集合,该集合是List接口的一个实现类,用法与ArrayList完全相同,区别在于Vector集合是线程安全的,而ArrayList集合是线程不安全的。在Vector类中提供了一个elements()方法用于返回Enumeration对象,通过Enumeration对象就可以遍历该集合中的元素。
2、在本案例中,使用Enumeration迭代器时,使用一个while循环对集合中的元素进行迭代,其过程与Iterator迭代的过程类似,通过hasMoreElements()方法循环判断是否存在下一个元素,如果存在,则通过nextElement()方法逐一取出每个元素。
案例7-9 HashSet集合的存储
一、案例描述
1、 考核知识点
编号:00107010 名称:HashSet集合
2、 练习目标
? 了解HashSet集合的存储特点 ? 掌握HashSet集合的用法
3、 需求分析
HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。为了让初学者熟悉HashSet集合的用法,本案例将针对HashSet集合中元素不可重复的特点,对HashSet集合的存储和遍历过程进行演示。
4、 设计思路(实现原理)
1) 编写一个类Example09,在该类中定义一个HashSet集合hs 2) 向集合hs中添加6个元素,其中有一些重复的元素 3) 用size()方法获取添加完元素后集合中元素的个数 4) 用Iterator迭代器遍历集合的每一个元素 5) 观察在输出结果中,是否存在重复的元素
二、案例实现
import java.util.*; public class Example09 {
public static void main(String[] args) {
13
博学谷——让IT教学更简单,让IT学习更有效
}
}
// 创建HashSet集合
HashSet hs = new HashSet();
//向HashSet集合中添加元素,其中包括重复元素 hs.add(\ hs.add(\hs.add(\hs.add(\hs.add(\hs.add(\// 输出集合中元素的个数
System.out.println(\添加后集合中元素个数:\// 输出集合中每一个元素
Iterator it = hs.iterator();
System.out.println(\添加后集合中包含以下元素:\while (it.hasNext()) { }
System.out.println(it.next());
运行结果如图7-11所示。
图7-11 运行结果
三、案例总结
1、HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向
HashSet集合中添加一个对象时,首先会调用该对象的hashCode()方法来确定元素的存储位置,然后再调用对象的equals()方法来确保该位置没有重复元素。
2、在本案例中,首先通过add()方法向HashSet集合依次添加了六个字符串,然后通过Iterator迭代器遍历所有的元素并输出打印。从打印结果可以看出取出元素的顺序与添加元素的顺序并不一致,并且重复存入的字符串对象\和\被去除了,只添加了一次。
案例7-10 将Object类存入HashSet
一、案例描述
1、 考核知识点
14
博学谷——让IT教学更简单,让IT学习更有效
编号:00107010 名称:HashSet集合
2、 练习目标
? 掌握如何将对象存入HashSet集合并且去除重复对象
3、 需求分析
HashSet集合之所以能确保不出现重复的元素,是因为它在添加对象时,会先调用该对象的hashCode()方法来确定元素的存储位置,再调用对象的equals()方法来确保该位置没有重复元素。为了将Object类存入HashSet集合,本案例将针对如何重写Object类中的hashCode()和equals()方法去除重复的Object对象进行演示。
4、 设计思路(实现原理)
1) 设计一个Person类,在该类中定义两个变量name和age 2) 在Person类中重写hashCode()和equals()方法
3) 编写类Example10,在该类中定义一个HashSet集合
4) 将Person对象存入HashSet集合中,其中含有重复的Person对象 5) 遍历HashSet集合中的元素,观察结果是否含有重复的对象
二、案例实现
设计Person类,其代码如下:
class Person {
private String name; private int age;
public Person(String name, int age) { }
// 重写hashCode方法,返回name属性的哈希值 public int hashCode() { }
// 重写equals方法
public boolean equals(Object obj) { }
// 重写toString()方法 public String toString() { }
15
return \if (this == obj) }
return false;
return true;
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age; if (obj instanceof Person) { return name.hashCode() + age * 2; this.name = name; this.age = age;