集合类补充案例.docx
- 文档编号:11455265
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:45
- 大小:33.50KB
集合类补充案例.docx
《集合类补充案例.docx》由会员分享,可在线阅读,更多相关《集合类补充案例.docx(45页珍藏版)》请在冰豆网上搜索。
集合类补充案例
第七章集合
案例7-1Collection接口对集合的操作
一、案例描述
1、考核知识点
编号:
00107002
名称:
Collection接口
2、练习目标
Ø掌握Collection接口中方法的使用
3、需求分析
Collection是所有单列集合的父接口,在Collection中定义了单列集合(List和Set)通用的一些方法。
为了让初学者熟悉Collection接口中的常用方法,本案例将演示Collection接口中的方法对集合进行操作来学习方法的使用。
4、设计思路(实现原理)
1)编写一个类Example01
2)在类中定义两个Collection集合,并向其中一个集合中添加数据
3)用Collection接口中的方法对定义的两个集合进行各种操作
二、案例实现
importjava.util.*;
publicclassExample01{
publicstaticvoidmain(String[]args){
//定义集合
Collectioncol1=newArrayList();
col1.add("123abc");
col1.add(123);
col1.add(34.121);
Collectioncol2=newArrayList();
//判断集合是否为空
booleana=col1.isEmpty();
booleanb=col2.isEmpty();
"col1集合是否为空:
"+a);
"col2集合是否为空:
"+b);
//将集合col1中的元素添加到col2中
col2.addAll(col1);
"col1集合中的元素添加到col2后,col2集合:
"+col2);
//获取两个集合的交集
booleanc=col1.retainAll(col2);
"col1和col2集合是否有交集:
"+c);
//清除集合col2中的元素
col2.clear();
"清除集合col2中的元素后,col2集合:
:
"+col2);
//获取集合中元素的个数
intsize=col1.size();
"col1集合中元素的个数:
"+size);
}
}
运行结果如图7-1所示。
图7-1运行结果
三、案例总结
1、Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合,如表7-1所示。
表7-1Collection中的方法
方法声明
功能描述
booleanadd(Objecto)
向集合中添加一个元素
booleanaddAll(Collectionc)
将指定Collection中的所有元素添加到该集合中
voidclear()
删除该集合中的所有元素
booleanremove(Objecto)
删除该集合中指定的元素
booleanremoveAll(Collectionc)
删除指定集合中的所有元素
booleanisEmpty()
判断该集合是否为空
booleancontains(Objecto)
判断该集合中是否包含某个元素
booleancontainsAll(Collectionc)
判断该集合中是否包含指定集合中的所有元素
Iteratoriterator()
返回在该集合的元素上进行迭代的迭代器(Iterator),用于遍历该集合所有元素
intsize()
获取该集合元素个数
2、在编译案例时,会得到如图7-2所示的警告,意思是说在使用ArrayList集合时并没有显示的指定集合中存储什么类型的元素,会产生安全隐患,这涉及到泛型安全机制的问题。
此警告对程序输出结果没有影响。
图7-2编译警告
3、在编写程序时,不要忘记使用importjava.util.*;语句导包,否则程序将会编译失败,显示类找不到。
案例7-2List接口的特有方法
一、案例描述
1、考核知识点
编号:
00107003
名称:
List接口
2、练习目标
Ø掌握List接口的常用方法的使用
3、需求分析
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法。
为了熟悉List接口中特有方法的使用,本案例将演示使用List接口中的方法对List集合进行添加、修改等操作。
4、设计思路(实现原理)
1)编写一个类Example02
2)在类中定义两个list集合,并向其中一个集合中添加数据。
3)用subList(intfromIndex,inttoIndex)方法获取集合的一部分
4)用set(intindex,Eelement)方法修改一个元素
5)用add(intindex,Eelement)方法增加一个元素
二、案例实现
importjava.util.*;
publicclassExample02{
publicstaticvoidmain(String[]args){
Listlist=newArrayList();
list.add("abc1");//add()方法添加元素
list.add("abc2");
list.add("abc3");
list.add("abc4");
;
ListnewList=list.subList(0,2);//subList()方法获取集合的前两个元素
;
Objecto=list.set(0,"haha");//set()方法修改指定位置元素值为haha
;
;
list.add(0,"QQ");//add()方法在集合指定位置增加一个元素QQ
;
}
}
运行结果如图7-3所示。
图7-3运行结果
三、案例总结
1、在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。
另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
2、List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法,如表7-2所示。
表7-2List接口中的常见方法
方法声明
功能描述
voidadd(intindex,Objectelement)
将元素element插入在List集合的index处
booleanaddAll(intindex,Collectionc)
将集合c所包含的所有元素插入到List集合的index处
Objectget(intindex)
返回集合索引index处的元素
Objectremove(int index)
删除index索引处的元素
Objectset(int index,Object element)
将索引index处元素替换成element对象,并将替换后的元素返回
intindexOf(Object o)
返回对象o在List集合中出现的位置索引
intlastIndexOf(Object o)
返回对象o在List集合中最后一次出现的位置索引
ListsubList(int fromIndex,int toIndex)
返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合
案例7-3ArrayList集合的存取
一、案例描述
1、考核知识点
编号:
00107004
名称:
ArrayList集合
2、练习目标
Ø了解ArrayList集合的特点
Ø掌握对ArrayList集合中元素的存取操作
3、需求分析
ArrayList是List接口的一个实现类,ArrayList集合中大部分方法都是从父类Collection和List继承过来的。
为了熟悉ArrayList集合的使用,本案例将演示ArrayList集合的定义、存储元素和取出元素。
4、设计思路(实现原理)
1)编写一个类Example03
2)在类中定义一个ArrayList集合
3)用add()方法向集合中添加元素
4)用get()方法获取集合中的指定元素,由于ArrayList集合的索引的取值范围是从0开始的,最后一个索引是size-1。
所以,要获取集合中的第2个元素应该是get
(1)。
二、案例实现
importjava.util.*;
publicclassExample03{
publicstaticvoidmain(String[]args){
ArrayListarray=newArrayList();
array.add("lisi");
array.add("wangwu");
array.add("jordan");
array.add("jackson");
array.add("white");
;
"第2个元素是:
"+array.get
(1));
}
}
运行结果如图7-4所示。
图7-4运行结果
三、案例总结
1、在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在
内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
2、索引位置为1的元素是集合中的第二个元素,这就说明集合和数组一样,索引的取值范围是从0开始的,最后一个索引是size-1,在访问元素时一定要注意索引不可超出此范围,否则会抛出角标越界异常IndexOutOfBoundsException。
3、由于ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。
但这种数组的结构允许程序通过索引的方式来访问元素,因此使用ArrayList集合查找元素很便捷。
案例7-4LinkedList集合的特殊方法
一、案例描述
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
二、案例实现
importjava.util.*;
publicclassExample04{
publicstaticvoidmain(String[]args){
LinkedListlink=newLinkedList();
link.addFirst("abc1");//将指定元素插入此集合的开头
link.addLast("haha");//将指定元素添加到此集合的结尾
;//获取但不移除此集合的第一个元素
;//获取但不移除此集合的最后一个元素
;
;//获取并移除此集合的第一个元素
;
;//获取并移除此集合的最后一个元素
}
}
运行结果如图7-5所示。
图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-5Iterator遍历集合元素
一、案例描述
1、考核知识点
编号:
00107006
名称:
Iterator接口
2、练习目标
Ø掌握Iterator迭代器的使用
3、需求分析
在程序开发中,经常需要遍历集合中的所有元素。
针对这种需求,JDK专门提供了一个接口Iterator。
为了使初学者熟悉Iterator迭代器的使用,本案例将演示如何使用Iterator迭代器遍历集合中的元素。
4、设计思路(实现原理)
1)编写一个类Example05
2)在类中定义一个List集合,并向集合中添加数据
3)通过调用List集合的iterator()方法获得迭代器对象
4)在while循环条件中使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素
二、案例实现
定义Example05类,其代码如下:
importjava.util.*;
publicclassExample05{
publicstaticvoidmain(String[]args){
Listlist=newArrayList();
list.add("abc1");//向集合中添加元素
list.add("abc2");
list.add("abc3");
list.add("abc4");
Iteratorit=list.iterator();//获取迭代器对象
while(it.hasNext()){//判断是否还有元素
Objectobj=it.next();//取出元素
;
}
}
}
运行结果如图7-6所示。
图7-6运行结果
三、案例总结
1、需要注意的是,在通过next()方法获取元素时,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。
2、Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,图7-7演示了Iterator对象迭代元素的过程。
图7-7遍历元素过程图
案例7-6foreach循环:
简化遍历
一、案例描述
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中的元素
二、案例实现
importjava.util.*;
publicclassExample06{
publicstaticvoidmain(String[]args){
//创建list集合
Listlist=newArrayList();
list.add("sv");
list.add("lv");
list.add("mv");
list.add("tv");
"遍历集合中的元素:
");
for(Objectobj:
list){//foreach循环遍历集合中的元素
;
}
//定义数组
int[]arr={3,2,6};
"遍历数组中的元素:
");
for(intx:
arr){//foreach循环遍历数组中的元素
;
}
}
}
运行结果如图7-8所示。
图7-8运行结果
三、案例总结
1、通过案例可以看出,foreach循环在遍历集合时语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了。
foreach循环的次数是由容器中元素的个数决定的,每次循环时,foreach中都通过变量将当前循环的元素记住,从而将集合中的元素分别打印出来。
2、使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
案例7-7ListIterator迭代器的特有方法
一、案例描述
1、考核知识点
编号:
00107008
名称:
ListIterator接口
2、练习目标
Ø掌握ListIterator接口中特有方法的使用
3、需求分析
ListIterator迭代器是Iterator的子类,该类在父类的基础上增加了一些特有方法。
为了让初学者能熟悉ListIterator接口中特有方法的使用,本案例将演示如何用ListIterator接口中的方法向集合中插入元素和逆向遍历集合。
4、设计思路(实现原理)
1)编写一个类Example07
2)在该类中定义一个List集合,向集合中添加四个元素
3)用ListIterator接口的add()方法向集合中插入一个元素并遍历集合list
4)用ListIterator接口的booleanhasPrevious()方法逆向遍历集合
二、案例实现
importjava.util.*;
publicclassExample07{
publicstaticvoidmain(String[]args){
Listlist=newArrayList();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
ListIteratorlit=list.listIterator();
while(lit.hasNext()){
Objecto=lit.next();
//遍历到abc4元素时,向集合中添加一个元素
if("abc4".equals(o)){
lit.add("abc5");
}
;
}
//逆向遍历集合
"以下是逆向遍历");
while(lit.hasPrevious()){
;
}
}
}
运行结果如图7-9所示。
图7-9运行结果
三、案例总结
1、ListIterator迭代器的特有方法,如表7-3所示。
表7-3ListIterator迭代器的特有方法
方法声明
功能描述
voidadd(Objecto)
将指定的元素插入列表(可选操作)
booleanhasPrevious()
如果以逆向遍历列表,列表迭代器有多个元素,则返回true
Objectprevious()
返回列表中的前一个元素
voidremove()
从列表中移除由next或previous返回的最后一个元素(可选操作)
2、在本案例中,使用hasPrevious()方法判断是否存在上一个元素,如果存在,则通过previous()方法将元素取出,否则,则表示到达了集合的末尾,没有要遍历的元素。
3、在遍历过程中,如果想增加元素同样不能调用集合对象的add()方法,此时需要使用ListIterator提供的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,输出集合中的每一个元素
二、案例实现
importjava.util.*;
publicclassExample08{
publicstaticvoidmain(String[]args){
Vectorv=newVector();//创建Vector集合
v.addElement("秦始皇");
v.addElement("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 集合 补充 案例
![提示](https://static.bdocx.com/images/bang_tan.gif)