博学谷——让IT教学更简单,让IT学习更有效
案例7-4 LinkedList集合的特殊方法
一、案例描述
1、 考核知识点
编号:00107005
名称:LinkedList集合
2、 练习目标
? 了解LinkedList集合的特点
? 掌握LinkedList集合的特殊方法的使用
3、 需求分析
ArrayList集合在查询元素时速度很快,但在增删元素时效率较低,为了克服这种局限性,可以使用List接口的另一个实现类LinkedList。LinkedList集合除了对于元素的增删操作具有很高的效率,还专门针对元素的增删操作定义了一些特有的方法。为了熟悉这些特殊的方法,本案例将演示如何使用LinkedList中的特殊方法对集合进行增删操作。
4、 设计思路(实现原理)
1) 编写一个类Example04,在该类中定义一个LinkedList集合 2) 分别使用addFirst()和addLast()方法向集合中添加元素 3) 使用peekFirst()方法获取集合中的第一个元素
4) 使用pollFirst()方法获取并移除集合中的第一个元素 5) 使用pollLast()方法获取并移除集合中的最后一个元素 6) 此时,集合中应该没有元素了,用peekLast()方法获取集合中的最后一个元素,由于集合为空,
应该返回NULL
二、案例实现
import java.util.*; public class Example04 { }
public static void main(String[] args) { }
LinkedList link = new LinkedList(); link.addFirst(\ link.addLast(\
//将指定元素插入此集合的开头 //将指定元素添加到此集合的结尾
System.out.println(link.peekFirst());//获取但不移除此集合的第一个元素 System.out.println(link.pollFirst());//获取但不移除此集合的最后一个元素 System.out.println(link);
System.out.println(link.pollLast());//获取并移除此集合的第一个元素 System.out.println(link);
System.out.println(link.peekLast());//获取并移除此集合的最后一个元素
运行结果如图7-5所示。
6
博学谷——让IT教学更简单,让IT学习更有效
图7-5 运行结果
三、案例总结
1、LinkedList集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。当插入一个新元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存储结构,所以LinkedList集合对于元素的增删操作具有很高的效率。
2、在本案例中,所用的方法及其功能具体如下:
1) peekFirst()方法用于获取LinkedList集合中的第一个元素,如果此列表为空则返回NULL 2) peekLast()方法用于获取LinkedList集合中的最后一个元素,如果此列表为空则返回NULL 3) pollFirst()方法用于获取并移除LinkedList集合中的第一个元素,如果此列表为空则返回NULL 4) pollLast()方法用于获取并移除LinkedList集合中的最后一个元素,如果此列表为空则返回NULL 5) addFirst()方法用于添加LinkedList集合中的第一个元素 6) addLast()方法用于添加LinkedList集合中的最后一个元素
案例7-5 Iterator遍历集合元素
一、案例描述
1、 考核知识点
编号:00107006 名称:Iterator接口
2、 练习目标
? 掌握Iterator迭代器的使用
3、 需求分析
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口Iterator。为了使初学者熟悉Iterator迭代器的使用,本案例将演示如何使用Iterator迭代器遍历集合中的元素。
4、 设计思路(实现原理)
1) 编写一个类Example05
2) 在类中定义一个List集合,并向集合中添加数据 3) 通过调用List集合的iterator()方法获得迭代器对象
4) 在while循环条件中使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用
next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素
7
博学谷——让IT教学更简单,让IT学习更有效
二、案例实现
定义Example05类,其代码如下:
import java.util.*; public class Example05 { }
public static void main(String[] args) { }
List list = new ArrayList(); list.add(\ list.add(\list.add(\list.add(\
Iterator it = list.iterator(); //获取迭代器对象 while (it.hasNext()) { //判断是否还有元素 }
Object obj = it.next(); //取出元素 System.out.println(obj);
//向集合中添加元素
运行结果如图7-6所示。
图7-6 运行结果
三、案例总结
1、需要注意的是,在通过next()方法获取元素时,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。
2、Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,图7-7演示了Iterator对象迭代元素的过程。
图7-7 遍历元素过程图
8
博学谷——让IT教学更简单,让IT学习更有效
案例7-6 foreach循环:简化遍历
一、案例描述
1、 考核知识点
编号:00107007 名称:foreach循环
2、 练习目标
? 掌握使用foreach循环遍历集合和数组
3、 需求分析
虽然Iterator可以用来遍历集合中的元素,但写法上比较繁琐,为了简化书写,从JDK5.0开始,提供了foreach循环。foreach循环用于遍历数组或集合中的元素。为了让初学者能熟悉foreach循环的使用,本案例将演示如何用foreach循环遍历数组和集合中的元素。
4、 设计思路(实现原理)
1) 编写一个类Example06,
2) 在该类中定义一个List集合,向集合中添加四个元素 3) 用foreach循环遍历集合中的元素
4) 在类中定义一个数组arr,静态初始化数组int[] arr = {3,2,6}; 5) 用foreach循环遍历arr中的元素
二、案例实现
import java.util.*; public class Example06 {
public static void main(String[] args) {
// 创建list集合
List list = new ArrayList(); list.add(\list.add(\list.add(\list.add(\
System.out.println(\遍历集合中的元素:\
for (Object obj : list) { }
// 定义数组
int[] arr = { 3, 2, 6 };
System.out.println(\遍历数组中的元素:\
}
for (int x : arr) { }
//foreach循环遍历数组中的元素
System.out.println(x); System.out.println(obj);
//foreach循环遍历集合中的元素
9
博学谷——让IT教学更简单,让IT学习更有效
}
运行结果如图7-8所示。
图7-8 运行结果
三、案例总结
1、通过案例可以看出,foreach循环在遍历集合时语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了。foreach循环的次数是由容器中元素的个数决定的,每次循环时,foreach中都通过变量将当前循环的元素记住,从而将集合中的元素分别打印出来。
2、使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
案例7-7 ListIterator迭代器的特有方法
一、案例描述
1、 考核知识点
编号:00107008
名称:ListIterator接口
2、 练习目标
? 掌握ListIterator接口中特有方法的使用
3、 需求分析
ListIterator迭代器是Iterator的子类,该类在父类的基础上增加了一些特有方法。为了让初学者能熟悉ListIterator接口中特有方法的使用,本案例将演示如何用ListIterator接口中的方法向集合中插入元素和逆向遍历集合。
4、 设计思路(实现原理)
1) 编写一个类Example07
2) 在该类中定义一个List集合,向集合中添加四个元素
3) 用ListIterator接口的add()方法向集合中插入一个元素并遍历集合list 4) 用ListIterator接口的boolean hasPrevious()方法逆向遍历集合
二、案例实现
import java.util.*; public class Example07 {
public static void main(String[] args) {
10