JAVA泛型与集合框架课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《JAVA泛型与集合框架课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 集合 框架 课件
- 资源描述:
-
1、2010-1-101Java面向对象程序设计面向对象程序设计第第13章章配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平泛型与集合框架2010-1-102主要内容主要内容泛型泛型链表链表堆栈堆栈散列映射散列映射树集树集树映射树映射难点难点树映射树映射导读导读2010-1-103在在jdk1.2之后,之后,Java提供了实现常见数据结构的类,提供了实现常见数据结构的类,这些实现数据结构的类通称为这些实现数据结构的类通称为Java集合框架。在集合框架。在JDK1.5后,后,Java集合框架开始支持泛型,本章首先介集合框架开始支持泛型,本章首先介绍泛型,然后讲解常
2、见数据结构类的用法。绍泛型,然后讲解常见数据结构类的用法。 概述概述2010-1-10413.1 泛型泛型 泛型(泛型(GenericsGenerics)是在是在JDK1.5JDK1.5中推出的,其中推出的,其主要目的是可以建立具有类型安全的集合框架,主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。如链表、散列映射等数据结构。 2010-1-10513.1.1 泛型类声明泛型类声明 可以使用可以使用“class 名称名称”声明一个类声明一个类,为为了和普通的类有所区别,这样声明的类称作泛型类了和普通的类有所区别,这样声明的类称作泛型类,如:如: class People
3、参考:参考:Cone.javaCone.java 2010-1-10613.1.2 使用泛型类声明对象使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对泛型类声明和创建对象时,类名后多了一对“”,而且必须要用具体的类型替换而且必须要用具体的类型替换“”中的泛型。例如:中的泛型。例如: Cone Cone coneOneconeOne; ; coneOneconeOne =new Cone(new Circle(); =new Cone(new Circle(); 例题例题13-113-12010-1-10713.1.3 泛型接口泛型接口 可以使用可以使用“interface inter
4、face 名称名称 ”声明一个声明一个接口,这样声名的接口称作泛型接口如接口,这样声名的接口称作泛型接口如 interface Computerinterface Computer 例题例题13-213-22010-1-1088.1 Java中的集合类结构 Java提供了提供了集合类集合类(Collection)及其及其API,于是用户可以通,于是用户可以通过统一的操作接口,使得从一种数据结构到另一种数据结过统一的操作接口,使得从一种数据结构到另一种数据结构的转换极为方便,简化了程序员编程时的负担。构的转换极为方便,简化了程序员编程时的负担。 任何集合框架包括三部分内容任何集合框架包括三部分内
5、容:对外的接口对外的接口接口的实现接口的实现对集合运算的算法对集合运算的算法集合集合API的根是一个集合接口,存放于的根是一个集合接口,存放于java.util包中。包中。Collection接口定义了所有属于集合的类都应该具有的通用接口定义了所有属于集合的类都应该具有的通用方法。方法。2010-1-1098.1 Java中的集合类结构 Java集合框架结构由两颗接口树构成:集合框架结构由两颗接口树构成: 第一棵树根节点为第一棵树根节点为Collection接口接口,它定义了所有,它定义了所有集合的基本操作,如添加、删除、遍历等。集合的基本操作,如添加、删除、遍历等。 它的子接口它的子接口Se
6、t、List等则提供了更加特殊的等则提供了更加特殊的功能。功能。 2010-1-1010Collection接口接口 Collection Set List SortedSet AbstractSet TreeSet HashSet AbstractList ArrayList Vector AbstractSequentialList Stack LinkedList 2010-1-1011第二棵树根节点为第二棵树根节点为Map接口接口。与哈希表类。与哈希表类似,保持的是键值对的集合,可以通过似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。键来实现对值元素的快速访问。2010-
7、1-1012Map接口接口 Map AbstractMap TreeMap HashtMap WeakHashMap 第二棵树根节点为第二棵树根节点为Map接口。与哈希表类接口。与哈希表类似,保持的是键值对的集合,可以通过似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。键来实现对值元素的快速访问。2010-1-10132010-1-10148.2 Collection8.2 Collection接口接口方法名功能说明boolean add(Object o)插入单个对象boolean addAll(Collection c)添加另外一个集合对象c中的所有对象Object toAr
8、ray()以数组的形式返回内容Object toArray(Object a)以数组的形式返回内容Iterator iterator()返回一个实现了Iterator接口的对象void clear()清空所有对象boolean remove(Object o)删除指定的对象boolean ramoveAll(Collection c)删除c中所拥有的对象boolean retainAll(Collection c)保留指定的对象boolean contains(Object o)检查是否包含有指定的对象boolean containsAll(Collection c)检查是否包含c中所包含的对
9、象boolean isEmpty()判断集合是否为空int size()获取集合中的对象个数2010-1-101513.2 List13.2 List接口接口 List接口接口是包含是包含有序元素有序元素的一种的一种Collection子接子接口,其中的元素口,其中的元素必须按序存放必须按序存放。元素之间的顺。元素之间的顺序关系可以由插入的时间先后决定,也可以由序关系可以由插入的时间先后决定,也可以由元素值的大小决定。元素值的大小决定。 List接口接口使用类似于数组下标的使用类似于数组下标的索引索引的概念表示的概念表示元素在元素在List 中的位置。用户能够使用索引来访中的位置。用户能够使用
10、索引来访问问List 中的元素。索引从中的元素。索引从0开始。为了保持元素开始。为了保持元素的有序的特性,的有序的特性,List接口新增加了大量的方法,接口新增加了大量的方法,使之能够在序列中间根据具体位置添加和删除使之能够在序列中间根据具体位置添加和删除元素。元素。 2010-1-101613.2 链表链表 链表是由若干个称作节点的对象组成的一种链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节数据结构,每个节点含有一个数据和下一个节点的引用点的引用 。 2010-1-1017List接口的主要方法接口的主要方法 方法名功能说明void add(int index
11、,Object element)在指定位置上添加一个对象boolean addAll(int index,Collection c) 将c中的所有对象添加到指定位置ListIterator listIterator()返回一个ListIteratorListIterator listIterator(int index)返回指定的ListIteratorObject get(int index)返回指定位置的对象Object remove(int index)删除指定位置的对象Object set(int index,object element)用元素element取代位置index上的元素
12、,返回被取代的元素int indexOf(object o)返回第一个匹配对象的位置int lastIndexOf(object o)返回最后一个匹配对象的索引2010-1-101813.2.1 LinkedList 类类 LinkedList类类提供了使用双向链表实现提供了使用双向链表实现数据存储的方法,可按序号检索数据,数据存储的方法,可按序号检索数据,并能够进行向前或向后遍历。并能够进行向前或向后遍历。 由于插入数据时只需要记录元素的前由于插入数据时只需要记录元素的前后项即可,所以插入数度较快,因此适后项即可,所以插入数度较快,因此适合于在链表中间需要频繁进行插入和删合于在链表中间需要频
13、繁进行插入和删除的操作。除的操作。2010-1-101913.2.1 LinkedListLinkedList泛型类泛型类 LinkedListLinkedList泛型类泛型类创建的对象以链表结构存储数据,创建的对象以链表结构存储数据,习惯上称习惯上称LinkedListLinkedList类创建的对象为链表对象。例如,类创建的对象为链表对象。例如,LinkedListLinkedList mylistmylist=new =new LinkedListLinkedList();();创建一个空双链表。创建一个空双链表。 add(Eadd(E objobj) ) 向链表依次增加节点向链表依次增
14、加节点 2010-1-1020Linkedlist接口的主要方法 方法名功能说明public boolean add(Object element) 向链表末尾添加一个新的结点public boolean add(int index,Object o) 将对象o添加到链表中由index指定位置public boolean addFirst(Object o)将对象o添加到链表的头部public boolean addLast(Object o)将对象向o添加到链表的末尾public boolean clear()删除链表的所有节点,成为空链表public Object remove(int i
15、ndex)删除指定位置上的结点public Object remove(Object o)删除首次出现含有o的结点public Object get (int index)返回链表中index位置处的结点对象2010-1-1021 ArrayList类类是是List接口的一个接口的一个可变长可变长数组的数组的实现,即一个实现,即一个ArrayList类对象可以动态改变大类对象可以动态改变大小。每个小。每个ArrayList类对象都有一个容量类对象都有一个容量(Capacity),用于存储元素的数组的大小。容量,用于存储元素的数组的大小。容量可随着不断添加新元素而自动增加。可随着不断添加新元素而
16、自动增加。 序列以初始长度创建,当长度超过时,集合序列以初始长度创建,当长度超过时,集合自动变大;当删除对象时,集合自动变小。集合自动变大;当删除对象时,集合自动变小。集合中允许存储中允许存储null值。值。ArrayList类的随机访问速度类的随机访问速度快,但是向表中插入和删除比较慢。快,但是向表中插入和删除比较慢。 当需要插入大量元素时,在插入前可以调用当需要插入大量元素时,在插入前可以调用ensureCapacity 方法来增加方法来增加ArrayList 的容量以的容量以提高插入效率。提高插入效率。8.4.2 ArrayList 类类2010-1-1022 ArrayList常用的构
17、造函数如下:常用的构造函数如下: ArrayList ():构建一个空的:构建一个空的ArrayList对象。对象。 ArrayList (Collection c):构建一个构建一个ArrayList对象,对象,并且将集合并且将集合c中所有元素添加进去。中所有元素添加进去。 ArrayList (int initialCapacity):构建一个拥有特构建一个拥有特定容量的空定容量的空ArrayList对象。对象。 ArrayList的很多成员方法与的很多成员方法与LinkedList相似,两相似,两者的本质区别是一个使用顺序结构,另一个使用者的本质区别是一个使用顺序结构,另一个使用链表结构
18、,因此,它也可以使用链表结构,因此,它也可以使用LinkedList类提类提供的方法进行列表的操作。供的方法进行列表的操作。8.4.2 ArrayList 类类2010-1-10232010-1-10248.5 Iterator接口接口 除了使用集合对象的除了使用集合对象的get()方法可以实现对方法可以实现对集合中的元素的遍历外。利用迭代器集合中的元素的遍历外。利用迭代器(Iterator)也可以实现元素遍历。也可以实现元素遍历。 迭代器迭代器是一个实现了是一个实现了Iterator接口或者接口或者ListIterator接口的对象。接口的对象。ListIterator继承继承了了Itera
19、tor,可以进行双向遍历以及元素的,可以进行双向遍历以及元素的修改。修改。2010-1-10252010-1-1026 Iterator迭代器只能迭代器只能前向循环前向循环,如果需,如果需要双向遍历,则可以使用更高级的要双向遍历,则可以使用更高级的ListIterator迭代器迭代器,ListIterator接口继承接口继承自自Iterator接口。接口。 ListIterator迭代器除了有迭代器除了有next()方法外,方法外,还新增了还新增了hasprevious()方法和方法和previous()方方法,实现前向遍历。法,实现前向遍历。ListIterator还可以定还可以定位当前的索
20、引位置,调用位当前的索引位置,调用nextIndex()和和previousIndex()就可以实现。就可以实现。 2010-1-10272010-1-10282010-1-102913.3 Stack类类 在在Java语言中,语言中,Stack类类是是java.util包中专门用来包中专门用来实现栈的工具类。实现栈的工具类。 Stack类继承自类继承自Vector类,因此它类,因此它是是Vector的一的一个子类,实现了一个后进先出的堆栈个子类,实现了一个后进先出的堆栈。 Stack类继承了类继承了Vector类的所有方法,还新增了类的所有方法,还新增了一些方法使得一些方法使得Vector类
21、能够实现堆栈的操作。类能够实现堆栈的操作。2010-1-10301、创建、创建Stack类对象类对象 public Stack();它建立一个空的堆栈;它建立一个空的堆栈2、压栈与出栈操作、压栈与出栈操作 public Object push(Object item):将指定的对象压入栈:将指定的对象压入栈 public Object pop():将栈顶的对象从栈中取出:将栈顶的对象从栈中取出3、检查栈是否为空、检查栈是否为空 public boolean empty():测试堆栈是否为空,若堆栈中:测试堆栈是否为空,若堆栈中没有对象元素,则返回没有对象元素,则返回true,否则返回,否则返回
展开阅读全文