泛型和集合框架

上传人:ap****ve 文档编号:115986467 上传时间:2019-11-15 格式:PPT 页数:64 大小:583.50KB
返回 下载 相关 举报
泛型和集合框架_第1页
第1页 / 共64页
泛型和集合框架_第2页
第2页 / 共64页
泛型和集合框架_第3页
第3页 / 共64页
泛型和集合框架_第4页
第4页 / 共64页
泛型和集合框架_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《泛型和集合框架》由会员分享,可在线阅读,更多相关《泛型和集合框架(64页珍藏版)》请在金锄头文库上搜索。

1、第12章泛型与集合框架 12.1 泛型 泛型(Generics)是在JDK1.5中推出的,其主 要目的是可以建立具有类型安全的集合框架,如 链表、散列映射等数据结构 泛型的目的 Java泛型的主要目的是可以建立具有类型安全 的数据结构,如链表、散列表等数据结构,最重 要的一个优点就是:在使用这些泛型类建立的数 据结构时,不必进行强制类型转换,即不要求进 行运行时类型检查。 JDK1.5是支持泛型的编译器,它将运行时的类 型检查提前到编译时执行,使代码更安全。 12.1.1 泛型类 可以使用“class 名称”声明一个类 ,为了和普通的类有所区别,这样声明的类称作 泛型类,如: class Sh

2、owObject E是其中的泛型,也就是并没有指定E是何种类 型 泛型类的类体和和普通类的类体完全类似,由成 员变量和方法构成 举例 public class ShowObject public showMess(E b) String mess=b.toString(); System.out.println(mess); 12.1.2 泛型类声明对象 和普通的类相比,泛型类声明和创建对象时,类 名后多了一对“”,而且必须要用具体的类型 替换“”中的泛型。 Dog.java public class Dog public String toString() return Cat.java p

3、ublic class Cat public String toString() return “一只小花猫“; public class Example12_1 public static void main(String args ) ShowObject showDog = new ShowObject(); showDog.showMess(new Dog(); ShowObject showCat = new ShowObject(); showCat.showMess(new Cat(); 说明 泛型类中的泛型变量只能调用Object类中的方法 ,因此Cat和Dog类都重写了Obj

4、ect类的 toString()方法。 12.1.3 泛型接口 可以使用“interface 名称”声明一 个接口,这样声名的接口称作泛型接口如 interface Listen void listen(E x); 注:普通类实现泛型接口时,必须指定泛型接口 中泛型列表中的具体类型 例12-2 interface Listen void listen(E x); class Student implements Listen public void listen(Piano p) p.play(); class Teacher implements Listen public void lis

5、ten(Violin v) v.play(); class Piano public void play() System.out.println(“钢琴协奏曲:黄河“); class Violin public void play() System.out.println(“小提琴协奏曲:梁祝“); public class Example12_2 public static void main(String args ) Student zhang=new Student(); System.out.println(“学生听:“); zhang.listen(new Piano(); Te

6、acher teacher=new Teacher(); System.out.println(“老师听:“); teacher.listen(new Violin(); Java集合框架 在Java语言中,设计者对常用的数据结构和算 法做了一些规范(接口)和实现(具体实现接口 的类)。 所有抽象出来的数据结构和算法统称为Java集 合框架 Java程序员在具体应用时,不必考虑数据结构 和算法实现细节,只需要用这些类创建出来的一 些对象,然后直接应用就可以了,提高了编程效 率 Java 容器类 容器类可以大大提高编程效率和编程能力 Java2容器类类库的用途是“保存对象”,它分 为两类: Co

7、llection-一组独立的元素,通常这些元素都 服从某种规则。List必须保持元素特定的顺序, 而Set不能有重复元素。 Map-一组成对的“键值对”对象,即其元素 是成对的对象 集合框架的层次结构 说明 Collection是集合接口,集合框架的根,代表一组 Object Set子接口:里面的元素不允许重复 List子接口:里面的元素可以重复 说明 Set和List对比: Set:检索元素效率低下,删除和插入效率高。 插入和删除不会引起元素位置改变 List:和数组类似,List可以动态增长,查找元 素效率高。 说明 Set的子类: HashSet 以哈希表的形式存放元素,插入删除速度很快

8、 TreeSet 保持次序的Set,底层为树结构。使用它可以从 Set中提取有序的序列。 List的子类: ArrayList:动态数组(顺序结构) LinkedList:链表(链式结构) 12.2 链表 链表是由若干个称作节点的对象组成的一种数据 结构,每个节点含有一个数据和下一个节点的引 用,或含有一个数据并含有上一个节点的引用和 下一个节点的引用 数据 引用 引用 数据 null 引用 数据 引用 引用 数据 引用 null 图12.3 双链表示意图 12.2.1 LinkedList泛型类 java.util包中的LinkedList泛型类创建的对 象以链表结构存储数据,习惯上称Lin

9、kedList类 创建的对象为链表对象。例如, LinkedList list = new LinkedList(); 创建一个空双链表。 使用LinkedList泛型类声明创建链表时,必 须要指定E的具体类型,然后链表就可以使用 add(E obj)方法向链表依次增加节点 举例 list.add(“你好”); list.add(“十一快乐”); list.add(“注意休息”); 此时,链表里有3个节点,节点自动链接在一起 12.2.2 常用方法 以下是LinkedList泛型类实现Lis泛型接口中 的一些常用方法。 public boolean add(E element) public

10、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 indexOf(E element) public int lastIndexOf(E element) public E set(int index ,E element) public int size() public boolean contains(Object element) 以下是Linke

11、dList泛型类本身新增加的一些 常用方法 public void addFirst(E element) public void addLast(E element) public E getFirst() public E getLast() public E removeFirst() public E removeLast() public Object clone() 12.2.3 遍历链表 当用户需要遍历集合中的对象时,应当使用该集 合提供的迭代器,而不是让集合本身来遍历其中 的对象。由于迭代器遍历集合的方法在找到集合 中的一个对象的同时,也得到待遍历的后继对象 的引用,因此迭代器

12、可以快速地遍历集合。 什么是迭代器 迭代器是一个实现了Iterator接口的类的对象 所有实现了Collection接口的类都有一个名称为 iterator()的方法来获取迭代器 链表对象可以使用iterator()方法获取一个 Iterator对象,该对象就是针对当前链表的迭代 器 next方法:返回迭代器中的一个元素 hasNext方法:如果容器里还有元素,则为true 例12-3 import java.util.*; public class Example12_3 public static void main(String args ) List list=new LinkedLi

13、st(); list.add(“大家好“); list.add(“国庆60周年“); list.add(“十一快乐“); Iterator iter=list.iterator(); while(iter.hasNext() String te=iter.next(); System.out.print(te+“ “); System.out.println(“); long endTime=System.currentTimeMillis(); for(int i=0;ilist.size();i+) String te=list.get(i); System.out.print(te+“

14、“); JDK1.5之前没有泛型的LinkedList类,可以用 普通的LinkedList创建一个链表对象,如 LinkedList mylist=new LinkedList(); 然后mylist链表可以使用add(Object obj)方法向 这个链表依次添加节点。由于任何类都是Object 类的子类,因此可以把任何一个对象作为链表节 点中的对象 使用集合框架注意事项(没有使用泛型) ObjectObjectObject 加入集合 从集合中取出 (Rabbit) object(Car) object (Student) object RabbitCarStudent RabbitCar Student 任何对象加入集合类后,自动转变为Object类型;取出 时,需要进行强制类型转换,恢复为特定的类型 例12-4 使用了JDK1.5版本之前的LinkedList 12.2.4 排序与查找 如果链表中的数据是实现了Comparable接口的 类的实例,比如String对象,那么Java.util包中 的Collections类调用sort(List list)方法可 以对参数指定的列表进行排序,即按节点中的存 储的对象的大小升序排列节点。 Collections类 注意区分和Collection接口的的区别 Co

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号