泛型与集合框架ppt课件_第1页
泛型与集合框架ppt课件_第2页
泛型与集合框架ppt课件_第3页
泛型与集合框架ppt课件_第4页
泛型与集合框架ppt课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第12章泛型与集合框 架 12.1 12.1 泛型泛型 泛型Generics是在JDK1.5中推出的,其主要目 的是可以建立具有类型平安的集合框架,如链表、 散列映射等数据构造 12.1.1 12.1.1 泛型类泛型类 可以运用“class 称号声明一个类, 为了和普通的类有所区别,这样声明的类称作泛型 类,如: class ShowObject 泛型类的类体和和普通类的类体完全类似,由成员 变量和方法构成 12.1.2 12.1.2 泛型类声明对象泛型类声明对象 和普通的类相比,泛型类声明和创建对象时,类名 后多了一对“,而且必需求用详细的类型交换 “中的泛型。 12.1.3 12.1.3

2、泛型接口泛型接口 可以运用“interface 称号声明一个 接口,这样声名的接口称作泛型接口如 interface Listen void listen(E x); 12.1.4 12.1.4 泛型的目的泛型的目的 Java泛型的主要目的是可以建立具有类型平安的数 据构造,如链表、散列表等数据构造,最重要的一 个优点就是:在运用这些泛型类建立的数据构造时 ,不用进展强迫类型转换,即不要求进展运转时类 型检查。JDK1.5是支持泛型的编译器,它将运转时 的类型检查提早到编译时执行,使代码更平安。 Java推出泛型的主要目的是为了建立具有类型平安 的数据构造 12.2 12.2 链表链表 链表是

3、由假设干个称作节点的对象组成的一种数据 构造,每个节点含有一个数据和下一个节点的援用 ,或含有一个数据并含有上一个节点的援用和下一 个节点的援用 数据 援用 援用 数据 null 援用 数据 援用 援用 数据 援用 null 图12.3 双链表表示图 12.2.1 LinkedList12.2.1 LinkedList泛型类泛型类 java.util包中的LinkedList泛型类创建的对象 以链表构造存储数据,习惯上称LinkedList类创建 的对象为链表对象。例如, LinkedList list = new LinkedList(); 创建一个空双链表。 运用LinkedList泛型类

4、声明创建链表时,必需 求指定E的详细类型,然后链表就可以运用add(E obj)方法向链表依次添加节点 12.2.2 12.2.2 常用方法常用方法 以下是LinkedList泛型类实现Lis泛型接口中的一些 常用方法。 public boolean add(E element) public void add(int index ,E element) public void clear() public E remove(int index) public boolean remove(E element) public E get(int index) public int indexO

5、f(E element) public int lastIndexOf(E element) public E set(int index ,E element) public int size() public boolean contains(Object element) 以下是LinkedList泛型类本身新添加的一些常 用方法 public void addFirst(E element) public void addLast(E element) public E getFirst() public E getLast() public E removeFirst() publi

6、c E removeLast() public Object clone() 12.2.3 12.2.3 遍历链表遍历链表 当用户需求遍历集合中的对象时,该当运用该集合 提供的迭代器,而不是让集合本身来遍历其中的对 象。由于迭代器遍历集合的方法在找到集合中的一 个对象的同时,也得到待遍历的后继对象的援用, 因此迭代器可以快速地遍历集合。 链表对象可以运用iterator()方法获取一个 Iterator对象,该对象就是针对当前链表的迭代器 JDK1.5之前没有泛型的LinkedList类,可以用普通 的LinkedList创建一个链表对象,如 LinkedList mylist=new Lin

7、kedList(); 然后mylist链表可以运用add(Object obj)方法向 这个链表依次添加节点。由于任何类都是Object类 的子类,因此可以把任何一个对象作为链表节点中 的对象 12.2.4 12.2.4 排序与查找排序与查找 假设链表中的数据是实现了Comparable接口的类的 实例,比如String对象,那么Java.util包中的 Collections类调用sort(List list)方法可以 对参数指定的列表进展排序,即按节点中的存储的 对象的大小升序陈列节点。 String类实现了泛型接口Comparable中的 compareTo(E b)方法,使得字符串可以

8、按字典序比 较大小,假设一个链表list如下添加节点: list.add(bird); list.add(apple); list.add(cat); 那么用sort方法排序list: Collection.sort(list); 之后,list中三个节点中的数据将依次是apple, bird和cat。 一个类可以实现泛型接口Comparable中的comareTo(E b) 方法来指定该类实例相互比较大小关系的准那么,实现 Comparable接口类创建的对象可以调用compareTo(E b) 方法和参数指定的对象比较大小关系。假设a和是实现 Comparable接口类创建的两个对象,当

9、apareTo(b)0 时,称a大于b, apareTo(b)=0, 时,称a等于b。 当链表节点中的对象是实现泛型接口 Comparable的类的实例时,就可以运用sort方 法对链表进展排序操作。 有时需求查找链表中能否含有和指定数据相等的数 据,那么首先要对链表排序,然后运用 public static int binarySearch(List list, T key)图12.5 排序与查找 方法查找链表中能否含有和数据key相等的数据 12.2.5 12.2.5 洗牌与旋转洗牌与旋转 Collections类还提供了将链表中的数据重新随机 陈列的类方法以及旋转链表中数据的类方法,方法

10、 的详细解释如下 public static void shuffle(List list):随 机陈列list中的节点。 tatic void rotate(List list, int distance):旋转链表中 的节点,调用该方法后,list索引为i的节点中的数据将是调 用该方法前索引为(i-distance) mod list.size()的节点中的 数据。例如,假设list节点数据依次为:a b c d e,那么执 行Collections.rotate(list,1)之后,list节点数据依次为e a b c d。当方法的参数distance取正值时,向右转动list中的 数据

11、,取负值时向左转动list中的数据。图12.6 洗牌与旋 转 public static void reverse(List list):翻转list中的数 据。假设list节点中的数据依次为:a b c d e,那么在 Collections.reverse(list)之后,list节点中的数据依次为e d c b a。 12.3 12.3 堆栈堆栈 堆栈是一种“后进先出的数据构造,只能在一端 进展输入或输出数据的操作。堆栈把第一个放入该 堆栈的数据放在最底下,而把后续放入的数据放在 已有数据的顶上。向堆栈中输入数据的操作称为“ 压栈,从堆栈中输出数据的操作称为“弹栈。 由于堆栈总是在顶端进

12、展数据的输入输出操作,所 以弹栈总是输出删除最后压入堆栈中的数据, 这就是“后进先出的来历 运用java.util包中的Stack泛型类创建一个堆 栈对象,堆栈对象可以运用 public E push(E item); 实现压栈操作。运用 public E pop(); 实现弹栈操作。 运用 public boolean empty(); 判别堆栈能否还有数据,有数据前往false ,否那 么前往true。运用 public E peek(); 获取堆栈顶端的数据,但不删除该数据。运用 public int search(Object data); 获取数据在堆栈中的位置,最顶端的位置是,向

13、下依次添加,假设堆栈不含此数据,那么前往-1。 12.4 12.4 散列映射散列映射 12.4.1 HashMap泛型类 HashMap泛型类实现了泛型接口Map, HashMap类中的绝大部分方法都是Map接 口方法的实现。编程时,可以运用接口回调技术, 即把HashMap对象的援用赋值给Map接口 变量,那么接口变量就可以调用类实现的接口方法 HashMap对象采用散列表这种数据构造存储数 据,习惯上称HashMap对象为散列映射。散列 映射用于存储“键/值对,允许把任何数量的“ 键/值对存储在一同。键不可以发生逻辑冲突, 即不要两个数据项运用一样的键,假设出现两个数 据项对应一样的键,那

14、么,先前散列映射中的“键 /值对将被交换 12.4.2 12.4.2 常用方法常用方法 public void clear() 清空散列映射。 public Object clone() 前往当前散列映射的一个克隆。 public boolean containsKey(Object key) 假设散列映射有“键/值 对运用了参数指定的键,方法前往true,否那么前往false。 public boolean containsValue(Object value) 假设散列映射有“键/ 值对的值是参数指定的值,方法前往true,否那么前往false。 public V get(Object k

15、ey) 前往散列映射中运用key做键的“键/值 对中的值。 public boolean isEmpty() 假设散列映射不含任何“键/值对,方 法前往true,否那么前往false。 public V remove(Object key) 删除散列映射中键为参数指定的“键/ 值对,并前往键对应的值。 public int size() 前往散列映射的大小,即散列映射中“键/值对的 数目。 12.4.3 12.4.3 遍历散列映射遍历散列映射 public Collection values()方法前往一个实 现Collection接口类创建的对象,可以运用接 口回调技术,即将该对象的援用赋给

16、 Collection接口变量,该接口变量可以回调 iterator()方法获取一个Iterator对象,这个 Iterator对象存放着散列映射中一切“键/值对 中的“值 12.4.3 12.4.3 基于散列映射的查询基于散列映射的查询 对于经常需求进展查找的数据可以采用散列映射来 存储这样的数据,即为数据指定一个查找它的关键 字,然后按着“健-值对,将关键字和数据一并 存入散列映射中 12.5 12.5 树集树集 12.5.1 TreeSet泛型类 TreeSet类是实现Set接口的类,它的大部分 方法都是接口方法的实现。TreeSet类创建的对 象称作树集。树集采用树构造存储数据,树节点

17、中 的数据会按存放的数据的“大小顺序一层一层地 依次陈列,在同一层中的节点从左到右按字从小大 递增陈列,下一层的都比上一层的小 运用add方法为树集添加节点 12.5.2 12.5.2 节点的大小关系节点的大小关系 树集节点的陈列和链表不同,不按添加的先后顺序 陈列。树集用add方法添加节点,节点会按其存放 的数据的“大小顺序一层一层地依次陈列,在同 一层中的节点从左到右按“大小顺序递增陈列, 下一层的都比上一层的小 String类实现了Comparable泛型接口中的 compareTo(E b)方法,字符串对象调用 compareTo(String s)方法按字典序与参数s指定的 字符串比

18、较大小,也就是说两个字符串对象知道怎 样比较大小。因此,当树集中节点存放的是String 对象时,树集的节点数据的“大小顺序一层一层地 依次陈列,在同一层中的节点从左到右按“大小顺 序递增陈列,下一层的都比上一层的小。实现 Comparable泛型接口类创建的对象可以调用 compareTo(E b)方法和参数指定的对象比较大小 关系 12.5.3 TreeSet12.5.3 TreeSet类的常用方法类的常用方法 public boolean add(E o) 向树集添加加节点,节点中的数据由参数 指定,添加胜利前往true,否那么前往false。 public void clear() 删除树集中的一切节点。 public void contains(Object o) 假设树集中有包含参数指定的对象 ,该方法前往true,否那么前往false 。 public E first() 前往树集中的第一个节点中的数据最小的节点。 public E last(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论