《泛型与集合框架》ppt课件

上传人:tian****1990 文档编号:81015819 上传时间:2019-02-20 格式:PPT 页数:32 大小:1.26MB
返回 下载 相关 举报
《泛型与集合框架》ppt课件_第1页
第1页 / 共32页
《泛型与集合框架》ppt课件_第2页
第2页 / 共32页
《泛型与集合框架》ppt课件_第3页
第3页 / 共32页
《泛型与集合框架》ppt课件_第4页
第4页 / 共32页
《泛型与集合框架》ppt课件_第5页
第5页 / 共32页
点击查看更多>>
资源描述

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

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

2、接口如 interface Listen void listen(E x); ,12.1.4 泛型的目的,Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表、散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。JDK1.5是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,使代码更安全。Java推出泛型的主要目的是为了建立具有类型安全的数据结构,12.2 链表,链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用,或含有一个数据并含有上一个节点的引用和下一个节点的引用,1

3、2.2.1 LinkedList泛型类,java.util包中的LinkedList泛型类创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象。例如, LinkedList list = new LinkedList(); 创建一个空双链表。 使用LinkedList泛型类声明创建链表时,必须要指定E的具体类型,然后链表就可以使用add(E obj)方法向链表依次增加节点,12.2.2 常用方法,以下是LinkedList泛型类实现Lis泛型接口中的一些常用方法。 public boolean add(E element) public void add(int i

4、ndex ,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),以下是LinkedList泛型类本身新增加的

5、一些常用方法 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 遍历链表,当用户需要遍历集合中的对象时,应当使用该集合提供的迭代器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到待遍历的后继对象的引用,因此迭代器可以快速地遍历集合。 链表对象可以使用

6、iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器,JDK1.5之前没有泛型的LinkedList类,可以用普通的LinkedList创建一个链表对象,如 LinkedList mylist=new LinkedList(); 然后mylist链表可以使用add(Object obj)方法向这个链表依次添加节点。由于任何类都是Object类的子类,因此可以把任何一个对象作为链表节点中的对象,12.2.4 排序与查找,如果链表中的数据是实现了Comparable接口的类的实例,比如String对象,那么Java.util包中的Collections类调用sort

7、(List list)方法可以对参数指定的列表进行排序,即按节点中的存储的对象的大小升序排列节点。,String类实现了泛型接口Comparable中的compareTo(E b)方法,使得字符串可以按字典序比较大小,如果一个链表list如下添加节点: list.add(“bird“); list.add(“apple“); list.add(“cat“); 那么用sort方法排序list: Collection.sort(list); 之后,list中三个节点中的数据将依次是apple,bird和cat。,一个类可以实现泛型接口Comparable中的comareTo(E b)方法来指定该类

8、实例互相比较大小关系的准则,实现Comparable接口类创建的对象可以调用compareTo(E b)方法和参数指定的对象比较大小关系。假如a和是实现Comparable接口类创建的两个对象,当 pareTo(b)0 时,称a大于b, pareTo(b)=0, 时,称a等于b。,当链表节点中的对象是实现泛型接口Comparable的类的实例时,就可以使用sort方法对链表进行排序操作。 有时需要查找链表中是否含有和指定数据相等的数据,那么首先要对链表排序,然后使用 public static int binarySearch(List list, T key)图12.5 排序与查找 方法查找

9、链表中是否含有和数据key相等的数据,12.2.5 洗牌与旋转,Collections类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法,方法的详细解释如下 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,那么执行Collect

10、ions.rotate(list,1)之后,list节点数据依次为e a b c d。当方法的参数distance取正值时,向右转动list中的数据,取负值时向左转动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 堆栈,堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作。堆栈把第一个放入该堆栈的数据放在最底下,而把后

11、续放入的数据放在已有数据的顶上。向堆栈中输入数据的操作称为“压栈”,从堆栈中输出数据的操作称为“弹栈”。由于堆栈总是在顶端进行数据的输入输出操作,所以弹栈总是输出(删除)最后压入堆栈中的数据,这就是“后进先出”的来历,使用java.util包中的Stack泛型类创建一个堆栈对象,堆栈对象可以使用 public E push(E item); 实现压栈操作。使用 public E pop(); 实现弹栈操作。,使用 public boolean empty(); 判断堆栈是否还有数据,有数据返回false ,否则返回true。使用 public E peek(); 获取堆栈顶端的数据,但不删除该

12、数据。使用 public int search(Object data); 获取数据在堆栈中的位置,最顶端的位置是,向下依次增加,如果堆栈不含此数据,则返回-1。,12.4 散列映射,12.4.1 HashMap泛型类 HashMap泛型类实现了泛型接口Map,HashMap类中的绝大部分方法都是Map接口方法的实现。编程时,可以使用接口回调技术,即把HashMap对象的引用赋值给Map接口变量,那么接口变量就可以调用类实现的接口方法,HashMap对象采用散列表这种数据结构存储数据,习惯上称HashMap对象为散列映射。散列映射用于存储“键/值”对,允许把任何数量的“键/值”对存储在一起。键

13、不可以发生逻辑冲突,即不要两个数据项使用相同的键,如果出现两个数据项对应相同的键,那么,先前散列映射中的“键/值”对将被替换,12.4.2 常用方法,public void clear() 清空散列映射。 public Object clone() 返回当前散列映射的一个克隆。 public boolean containsKey(Object key) 如果散列映射有“键/值”对使用了参数指定的键,方法返回true,否则返回false。 public boolean containsValue(Object value) 如果散列映射有“键/值”对的值是参数指定的值,方法返回true,否则返

14、回false。 public V get(Object key) 返回散列映射中使用key做键的“键/值”对中的值。 public boolean isEmpty() 如果散列映射不含任何“键/值”对,方法返回true,否则返回false。 public V remove(Object key) 删除散列映射中键为参数指定的“键/值”对,并返回键对应的值。 public int size() 返回散列映射的大小,即散列映射中“键/值”对的数目。,12.4.3 遍历散列映射,public Collection values()方法返回一个实现Collection接口类创建的对象,可以使用接口回调

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

16、顺序一层一层地依次排列,在同一层中的节点从左到右按字从小大递增排列,下一层的都比上一层的小 使用add方法为树集添加节点,12.5.2 节点的大小关系,树集节点的排列和链表不同,不按添加的先后顺序排列。树集用add方法添加节点,节点会按其存放的数据的“大小”顺序一层一层地依次排列,在同一层中的节点从左到右按“大小”顺序递增排列,下一层的都比上一层的小,String类实现了Comparable泛型接口中的compareTo(E b)方法,字符串对象调用compareTo(String s)方法按字典序与参数s指定的字符串比较大小,也就是说两个字符串对象知道怎样比较大小。因此,当树集中节点存放的是String对象时,树集的节点数据的“大小”顺序一层一层地依次排列,在同一层中的节点从左到右按“大小”顺序递增排列,下一层的都比上一层的小。实现Comparable泛型接口类创建的对象可以调用compareTo(E b)方法和参数指定的对象比较大小关系,12.5.3 TreeSet类的常用方法,public boolean add(E o) 向树

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

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

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