第8章 Java泛型与集合类
核心内容:
集合的作用与概念
泛型的作用与用法。
Set、List、Map的用法
Iterator、Enumeration的用法
早期的集合类
集合可理解为一个容器,该容器主要指映射(map)、集合(set)、列表(list)、散列表(hashtable)等抽象数据结构。容器可以包含有多个元素,这些元素通常是一些Java对象。针对上述抽象数据结构所定义的一些标准编程接口称之为集合框架。集合框架主要是由一组精心设计的接口、类和隐含在其中的算法所组成,通过它们可以采用集合的方式完成Java对象的存储、获取、操作以及转换等功能。集合框架的设计是严格按照面向对象的思想进行设计的,它对上述所提及的抽象数据结构和算法进行了封装。封装的好处是提供一个易用的、标准的编程接口,使得在实际编程中不需要再定义类似的数据结构,直接引用集合框架中的接口即可,提高了编程的效率和质量。此外还可以在集合框架的基础上完成如堆栈、队列和多线程安全访问等操作。
在集合框架中有几个基本的集合接口,分别是Collection接口、List接口、Set接口和Map接口,它们所构成的层次关系如图8-1所示。
Collection接口
Set接口
List 接口
Map接口
图8-1 集合框架层次关系图
(1) Collection接口是一组允许重复的对象。
(2) Set接口继承Collection,但不允许集合中出现重复元素。
(3) List接口继承Collection,允许集合中有重复,并引入位置索引。
(4) Map接口与Collection接口无任何关系,Map的典型应用是访问按关键字存储的值,所包含的是键—值对,而不是单个独立的元素。
作为对上述接口的实现,Java语言目前主要提供下述类的定义,如表8-1所示
表8-1 集合接口及其类的实现
接口
集合类的实现
历史集合类
Set
HashSet
TreeSet
List
ArrayList
Vector
LinkedList
Stack
Map
HashMap
Hashtable
TreeMap
,。早期的集合有个缺点:当我们把一个对象存放到集合里后,集合就会“忘记”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型。早期的集合之所以被设计成这样,是因为设计集合的程序员不知道我们需要用它来保存什么类型的对象。所以他们把集合设计成能保存任何类型的对象。但这样做也带来了两个问题:一、集合对元素类型没有任何限制,例如只想创建一个保存String类型的集合,但是程序也允许把boolean类型的对象存放在该集合当中,这样容易引发异常。二、由于把对象保存在集合当中时,集合忘记了对象的数据类型,只知道它存放的是Object类型,因此取出集合元素后通常要进行强制类型转换。这种强制类型转换既会增加程序的复杂度,也可能引发ClassCastException。
【例8-1】 早期集合类
1 import ;
2 import ;
3 import ;
4 public class Test {
5 public static void main(String[] args) {
6 List list=new ArrayList();
7 ("beijing");
8 ("wuhan");
9 ("shanghai");
10 //(4);
11 for(int i=0;i<();i++){
12 String s=(String)(i);
13 (s);
14 }
15 }
16 }
输出结果:
D:\JAVA\8>java Test
beijing
wuhan
shanghai
程序说明:
上述程序的第6行是创建一个List集合对象,第7、8、9行是向该集合当中添了一个3个String类型的对象元素,第11、12、13、14行是通过for循环将集合当中的元素取出,转换为String类型并输出。
上述程序只是创建了一个List对象,而且只用List对象来保存字符串对象。但是对于保存在List对象当中的数据类型我们不能做任何的限制。如果在程序的第10行,我们不小心把一个int类型的数据
第8章 Java泛型与集合类 来自淘豆网m.daumloan.com转载请标明出处.