JAVA-泛型与集合框架

上传人:壹****1 文档编号:590343470 上传时间:2024-09-13 格式:PPT 页数:58 大小:1.01MB
返回 下载 相关 举报
JAVA-泛型与集合框架_第1页
第1页 / 共58页
JAVA-泛型与集合框架_第2页
第2页 / 共58页
JAVA-泛型与集合框架_第3页
第3页 / 共58页
JAVA-泛型与集合框架_第4页
第4页 / 共58页
JAVA-泛型与集合框架_第5页
第5页 / 共58页
点击查看更多>>
资源描述

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

1、Java面向对象程序设计面向对象程序设计第第13章章配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平泛型与集合框架_-1-101主要内容主要内容泛型泛型链表链表堆栈堆栈散列映射散列映射树集树集树映射树映射难点难点树映射树映射导读导读_-1-102在在jdk1.2之之后后,Java提提供供了了实实现现常常见见数数据据结结构构的的类类,这这些些实实现现数数据据结结构构的的类类通通称称为为Java集集合合框框架架。在在JDK1.5后后,Java集集合合框框架架开开始始支支持持泛泛型型,本本章章首首先先介介绍泛型,然后讲解常见数据结构类的用法。绍泛型,然后讲解常见数

2、据结构类的用法。 概述概述_-1-10313.1 泛型泛型 泛泛型型(GenericsGenerics)是是在在JDK1.5JDK1.5中中推推出出的的,其其主主要要目目的的是是可可以以建建立立具具有有类类型型安安全全的的集集合合框框架架,如链表、散列映射等数据结构。如链表、散列映射等数据结构。 _-1-10413.1.1 泛型类声明泛型类声明 可可以以使使用用“class 名名称称”声声明明一一个个类类,为为了和普通的类有所区别,这样声明的类称作泛型类了和普通的类有所区别,这样声明的类称作泛型类,如:如: class People 参考:参考:Cone.javaCone.java _-1-1

3、0513.1.2 使用泛型类声明对象使用泛型类声明对象 泛泛型型类类声声明明和和创创建建对对象象时时,类类名名后后多多了了一一对对“”,而而且且必必须须要要用用具具体体的的类类型型替替换换“”中中的的泛泛型型。例例如:如: Cone coneOne; Cone coneOne; coneOne =new Cone(new Circle(); coneOne =new Cone(new Circle(); 例题例题13-113-1_-1-10613.1.3 泛型接口泛型接口 可可以以使使用用“interface interface 名名称称 ”声声明明一一个个接口,这样声名的接口称作泛型接口如接

4、口,这样声名的接口称作泛型接口如 interface Computerinterface Computer 例题例题13-213-2_-1-1078.1 Java中的集合类结构 Java提供了提供了集合类集合类(Collection)及其及其API,于是用户可以通,于是用户可以通过统一的操作接口,使得从一种数据结构到另一种数据结过统一的操作接口,使得从一种数据结构到另一种数据结构的转换极为方便,简化了程序员编程时的负担。构的转换极为方便,简化了程序员编程时的负担。 任何集合框架包括三部分内容任何集合框架包括三部分内容:对外的接口对外的接口接口的实现接口的实现对集合运算的算法对集合运算的算法集合

5、集合API的根是一个集合接口,存放于的根是一个集合接口,存放于java.util包中。包中。Collection接口定义了所有属于集合的类都应该具有的通用接口定义了所有属于集合的类都应该具有的通用方法。方法。_-1-1088.1 Java中的集合类结构 Java集合框架结构由两颗接口树构成:集合框架结构由两颗接口树构成: 第一棵树根节点为第一棵树根节点为Collection接口接口,它定义了所有,它定义了所有集合的基本操作,如添加、删除、遍历等。集合的基本操作,如添加、删除、遍历等。 它的子接口它的子接口Set、List等则提供了更加特殊的等则提供了更加特殊的功能。功能。 _-1-109Col

6、lection接口接口_-1-1010第二棵树根节点为第二棵树根节点为Map接口接口。与哈希表类。与哈希表类似,保持的是键值对的集合,可以通过似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。键来实现对值元素的快速访问。_-1-1011Map接口接口第二棵树根节点为第二棵树根节点为Map接口。与哈希表类接口。与哈希表类似,保持的是键值对的集合,可以通过似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。键来实现对值元素的快速访问。_-1-1012_-1-10138.2 Collection8.2 Collection接口接口方法名功能说明boolean add(Objec

7、t o)插入单个对象boolean addAll(Collection c)添加另外一个集合对象c中的所有对象Object toArray()以数组的形式返回内容Object toArray(Object a)以数组的形式返回内容Iterator iterator()返回一个实现了Iterator接口的对象void clear()清空所有对象boolean remove(Object o)删除指定的对象boolean ramoveAll(Collection c)删除c中所拥有的对象boolean retainAll(Collection c)保留指定的对象boolean contains(O

8、bject o)检查是否包含有指定的对象boolean containsAll(Collection c)检查是否包含c中所包含的对象boolean isEmpty()判断集合是否为空int size()获取集合中的对象个数_-1-101413.2 List13.2 List接口接口List接口接口是包含是包含有序元素有序元素的一种的一种Collection子接口,子接口,其中的元素其中的元素必须按序存放必须按序存放。元素之间的顺序关系。元素之间的顺序关系可以由插入的时间先后决定,也可以由元素值的可以由插入的时间先后决定,也可以由元素值的大小决定。大小决定。List接口接口使用类似于数组下标的

9、使用类似于数组下标的索引索引的概念表示的概念表示元素在元素在List 中的位置。用户能够使用索引来访问中的位置。用户能够使用索引来访问List 中的元素。索引从中的元素。索引从0开始。为了保持元素的开始。为了保持元素的有序的特性,有序的特性,List接口新增加了大量的方法,使接口新增加了大量的方法,使之能够在序列中间根据具体位置添加和删除元素之能够在序列中间根据具体位置添加和删除元素。 _-1-101513.2 链表链表 链链表表是是由由若若干干个个称称作作节节点点的的对对象象组组成成的的一一种种数数据据结结构构,每每个个节节点点含含有有一一个个数数据据和和下下一一个个节节点的引用点的引用 。

10、 _-1-1016List接口的主要方法接口的主要方法 方法名功能说明void add(int index,Object element)在指定位置上添加一个对象boolean addAll(int index,Collection c)将c中的所有对象添加到指定位置ListIterator listIterator()返回一个ListIteratorListIterator listIterator(int index)返回指定的ListIteratorObject get(int index)返回指定位置的对象Object remove(int index)删除指定位置的对象Object

11、set(int index,object element)用元素element取代位置index上的元素,返回被取代的元素int indexOf(object o)返回第一个匹配对象的位置int lastIndexOf(object o)返回最后一个匹配对象的索引_-1-101713.2.1 LinkedList 类类 LinkedList类类提供了使用双向链表实现提供了使用双向链表实现数据存储的方法,可按序号检索数据,数据存储的方法,可按序号检索数据,并能够进行向前或向后遍历。并能够进行向前或向后遍历。 由于插入数据时只需要记录元素的前由于插入数据时只需要记录元素的前后项即可,所以插入数度较

12、快,因此适后项即可,所以插入数度较快,因此适合于在链表中间需要频繁进行插入和删合于在链表中间需要频繁进行插入和删除的操作。除的操作。_-1-101813.2.1 LinkedListLinkedList泛型类泛型类 LinkedListLinkedList泛泛型型类类创创建建的的对对象象以以链链表表结结构构存存储储数数据据,习惯上称习惯上称LinkedListLinkedList类创建的对象为链表对象。例如,类创建的对象为链表对象。例如,LinkedList mylist=new LinkedList();LinkedList mylist=new LinkedList();创建一个空双链表。

13、创建一个空双链表。 add(E obj)add(E obj) 向链表依次增加节点向链表依次增加节点 _-1-1019Linkedlist接口的主要方法 方法名功能说明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

14、()删除链表的所有节点,成为空链表public Object remove(int index)删除指定位置上的结点public Object remove(Object o)删除首次出现含有o的结点public Object get (int index)返回链表中index位置处的结点对象_-1-1020 ArrayList类类是是List接口的一个接口的一个可变长可变长数组的数组的实现,即一个实现,即一个ArrayList类对象可以动态改变大类对象可以动态改变大小。每个小。每个ArrayList类对象都有一个容量类对象都有一个容量(Capacity),用于存储元素的数组的大小。容量,用于

15、存储元素的数组的大小。容量可随着不断添加新元素而自动增加。可随着不断添加新元素而自动增加。 序列以初始长度创建,当长度超过时,集合序列以初始长度创建,当长度超过时,集合自动变大;当删除对象时,集合自动变小。集合自动变大;当删除对象时,集合自动变小。集合中允许存储中允许存储null值。值。ArrayList类的随机访问速度类的随机访问速度快,但是向表中插入和删除比较慢。快,但是向表中插入和删除比较慢。 当需要插入大量元素时,在插入前可以调用当需要插入大量元素时,在插入前可以调用ensureCapacity 方法来增加方法来增加ArrayList 的容量以的容量以提高插入效率。提高插入效率。8.4

16、.2 ArrayList 类类_-1-1021 ArrayList常用的构造函数如下:常用的构造函数如下: ArrayList ():构建一个空的:构建一个空的ArrayList对象。对象。 ArrayList (Collection c):构建一个构建一个ArrayList对象,对象,并且将集合并且将集合c中所有元素添加进去。中所有元素添加进去。 ArrayList (int initialCapacity):构建一个拥有特构建一个拥有特定容量的空定容量的空ArrayList对象。对象。 ArrayList的很多成员方法与的很多成员方法与LinkedList相似,两相似,两者的本质区别是一个

17、使用顺序结构,另一个使用者的本质区别是一个使用顺序结构,另一个使用链表结构,因此,它也可以使用链表结构,因此,它也可以使用LinkedList类提类提供的方法进行列表的操作。供的方法进行列表的操作。8.4.2 ArrayList 类类_-1-1022_-1-10238.5 Iterator接口接口 除了使用集合对象的除了使用集合对象的get()方法可以实现对方法可以实现对集合中的元素的遍历外。利用迭代器集合中的元素的遍历外。利用迭代器(Iterator)也可以实现元素遍历。也可以实现元素遍历。 迭代器迭代器是一个实现了是一个实现了Iterator接口或者接口或者ListIterator接口的对

18、象。接口的对象。ListIterator继承继承了了Iterator,可以进行双向遍历以及元素的,可以进行双向遍历以及元素的修改。修改。_-1-1024_-1-1025 Iterator迭代器只能迭代器只能前向循环前向循环,如果需,如果需要双向遍历,则可以使用更高级的要双向遍历,则可以使用更高级的ListIterator迭代器迭代器,ListIterator接口继承接口继承自自Iterator接口。接口。 ListIterator迭代器除了有迭代器除了有next()方法外,方法外,还新增了还新增了hasprevious()方法和方法和previous()方方法,实现前向遍历。法,实现前向遍历。

19、ListIterator还可以定还可以定位当前的索引位置,调用位当前的索引位置,调用nextIndex()和和previousIndex()就可以实现。就可以实现。 _-1-1026_-1-1027_-1-102813.3 Stack类类在在Java语言中,语言中,Stack类类是是java.util包中专门用来包中专门用来实现栈的工具类。实现栈的工具类。Stack类继承自类继承自Vector类,因此它类,因此它是是Vector的一个的一个子类,实现了一个后进先出的堆栈子类,实现了一个后进先出的堆栈。Stack类继承了类继承了Vector类的所有方法,还新增了类的所有方法,还新增了一些方法使得

20、一些方法使得Vector类能够实现堆栈的操作。类能够实现堆栈的操作。_-1-10291、创建、创建Stack类对象类对象 public Stack();它建立一个空的堆栈;它建立一个空的堆栈2、压栈与出栈操作、压栈与出栈操作 public Object push(Object item):将指定的对象压入栈:将指定的对象压入栈 public Object pop():将栈顶的对象从栈中取出:将栈顶的对象从栈中取出3、检查栈是否为空、检查栈是否为空 public boolean empty():测试堆栈是否为空,若堆栈中:测试堆栈是否为空,若堆栈中没有对象元素,则返回没有对象元素,则返回true

21、,否则返回,否则返回false4、查看栈顶端的数据,但不删除该数据。、查看栈顶端的数据,但不删除该数据。 public object peek()5、获取数据在堆栈中的位置、获取数据在堆栈中的位置。最顶端的位置是。最顶端的位置是1,向下,向下依次增加。如果堆栈不含有此数据,则返回依次增加。如果堆栈不含有此数据,则返回-1。 public search(Object data)例例:13.6_-1-103013.4 Map及及HashMap接口接口_-1-1031Map接口的主要方法接口的主要方法 方法名功能说明Object put(Object key,Object value) 插入新的对象

22、,并用key作为其键字void putAll(Map t)将另一个Map中的所有对象复制进来Set entrySet()返回映射中的关键字值对的集合Set keySet()返回映射中所有关键字的集合Collection values()返回映射中所有值的集合Object remove(Object key)删除指定的对象Object get(Object key)获取与key相联系的对象boolean containsKey(Object key)判断是否包含指定的键值boolean containsValue(Object value)判断是否包含指定的对象_-1-1032 Map接口的一个

23、抽象类是接口的一个抽象类是AbstractMap。在这个抽象类中,部分地实现了在这个抽象类中,部分地实现了Map接口接口中的成员方法,使得具体的映射类不必实中的成员方法,使得具体的映射类不必实现现Map接口中的每个成员方法。接口中的每个成员方法。 AstractMap抽象类有三个子类:抽象类有三个子类:TreeMap HashMap WeakHashMap: AstractMap抽象类抽象类_-1-1033 (1) TreeMap描述了一个按键值升序排列的映射描述了一个按键值升序排列的映射,它有一些扩展的方法,如它有一些扩展的方法,如firstKey(),lastKey()等,还可以从等,还可

24、以从TreeMap中指定一个范围以取得中指定一个范围以取得其子其子Map。 (2) HashMap描述的一个映射中允许存储空对象,描述的一个映射中允许存储空对象,由于键必须唯一,所以只能有一个空键值。由于键必须唯一,所以只能有一个空键值。 (3)WeakHashMap是一种改进的是一种改进的HashMap,它,它描述了一个映射,当集合中的某些内容不再使描述了一个映射,当集合中的某些内容不再使用时需清除掉无用的数据,并使用垃圾回收机用时需清除掉无用的数据,并使用垃圾回收机制进行回收。制进行回收。AstractMap抽象类抽象类_-1-1034HashMap通过哈希运算可以快速查找一个键,通过哈希

25、运算可以快速查找一个键,因此在适合于在因此在适合于在Map中插入、删除和定位元素。中插入、删除和定位元素。如果要按照如果要按照自然顺序或者自定义顺序自然顺序或者自定义顺序遍历关键字,遍历关键字,TreeMap会更好些。会更好些。 2HashMap _-1-1035 由于由于HashMap实现了实现了Map接口,因此它没有自接口,因此它没有自己的新方法。己的新方法。HashMap的构造方法如下:的构造方法如下:HashMap():创建一个空的创建一个空的HashMap集合。集合。HashMap(Map t):创建一个哈希集,将创建一个哈希集,将t中所有元素添中所有元素添加进去。加进去。HashM

26、ap(int initialCapacity):创建一个拥有特定容量创建一个拥有特定容量的空的空HashMap集合。集合。HashMap(int initialCapacity,float loadFactor):创建创建一个拥有特定容量和加载因子的空一个拥有特定容量和加载因子的空HashMap。_-1-1036 散列表中的容量散列表中的容量 是指能够存储对象的数量。是指能够存储对象的数量。当对象存储的数目到达容量乘以加载因子的值时,当对象存储的数目到达容量乘以加载因子的值时,容量将会自动地增加到原容量的容量将会自动地增加到原容量的2倍加倍加1,加,加1的目的是确保散列表的容量为质数或奇数。的

27、目的是确保散列表的容量为质数或奇数。 例如例如:aMap对象最初的容量为对象最初的容量为151,当存储对象的数量,当存储对象的数量达到达到91时,容量将会自动增加到时,容量将会自动增加到303。_-1-103713.4 散列映射散列映射 13.4.1 HashMapHashMap泛型类泛型类 HashMap对对象象采采用用散散列列表表这这种种数数据据结结构构存存储储数数据据,习习惯上称惯上称HashMap对象为散列映射。对象为散列映射。 例如例如HashMap hashtable= HashSet();HashMap hashtable= HashSet(); hashtable可以存储可以存

28、储“键键/值值”对数据。对数据。 相关方法:相关方法:public public V V put(K put(K key,V key,V value)value)将将键键/值值对对数数据据存存放放到到散散列列映映射射中中,该该方方法法同同时时返返回键所对应的值。回键所对应的值。 _-1-1038 loadFactor是是0.0 1.0之间的一个数,通常之间的一个数,通常默认为默认为0.75。加载因子定义了哈希集合。加载因子定义了哈希集合充满什么程度时就要增加容量。即当元充满什么程度时就要增加容量。即当元素的数目大于哈希集容量和加载因子之素的数目大于哈希集容量和加载因子之积时,哈希集容量将扩展。

29、积时,哈希集容量将扩展。_-1-1039HashMap类的主要成员方法方法描述Object put(Object key,Object value)用键值key存储对象valuevoid putAll(Map map)将map中的所有键值/对象传递给当前的散列表Object get(Object key)返回键值key所对应的对象remove(Object key)删除key键值所对应的对象Set KeySet()返回一个Set对象,其内容为所有的键值Set entrySet()返回一个Set对象,其内容为所有的键值/对象对Collection values()返回一个Collection对象

30、,其内容为散列表中存储的所有对象Object getKey()返回对象的键值Object getValue()返回所对应的对象void setValue(Object new)将对象设置为new_-1-104013.4.2 常用方法常用方法 public void clear()public void clear() 清空散列映射。清空散列映射。public Object clone()public Object clone() 返回当前散列映射的一个克隆。返回当前散列映射的一个克隆。public public boolean boolean containsKey(Object contai

31、nsKey(Object key)key) 如如果果散散列列映映射射有有“键键/ /值值”对对使使用了参数指定的键,方法返回用了参数指定的键,方法返回truetrue,否则返回否则返回falsefalse。 public public boolean boolean containsValue(Object containsValue(Object value)value) 如如果果散散列列映映射射有有“键键/ /值值”对的值是参数指定的值。对的值是参数指定的值。public public V V get(Object get(Object key)key) 返返回回散散列列映映射射中中使使用

32、用keykey做做键键的的“键键/ /值值”对对中中的的值。值。public public boolean boolean isEmpty()isEmpty() 如如果果散散列列映映射射不不含含任任何何“键键/ /值值”对对,方方法法返返回回truetrue,否则返回否则返回falsefalse。public public V V remove(Object remove(Object key)key) 删删除除散散列列映映射射中中键键为为参参数数指指定定的的“键键/ /值值”对对,并返回键对应的值。并返回键对应的值。public int size()public int size() 返回散

33、列映射的大小,即散列映射中返回散列映射的大小,即散列映射中“键键/ /值值”对的数目。对的数目。_-1-104113.6 树映射树映射 TreeMapTreeMap类类实实现现了了MapMap接接口口,称称TreeMapTreeMap对象为树映射。对象为树映射。 树树映映射射使使用用public public V V put(K put(K key,V key,V value);value);方方法法添添加加节点节点。 例题例题13-913-9_-1-104213.4.3 遍历散列映射遍历散列映射 public public Collection Collection values()valu

34、es()方方法法返返回回一一个个实实现现CollectionCollection接接口口类类创建的对象。创建的对象。 使使用用接接口口回回调调技技术术,即即将将该该对对象象的的引引用用赋赋给给CollectionCollection接接口口变变量量,该该接接口口变变量量可可以以回回调调iterator()iterator()方方法法获获取取一一个个IteratorIterator对对象象,这这个个IteratorIterator对对象存放着散列映象存放着散列映 射中所有射中所有“键键/ /值值”对中的对中的“值值”。 _-1-104313.5 Set13.5 Set接口接口Set接口是一种不包

35、含重复元素的接口是一种不包含重复元素的Collection的的子接口。子接口。Set接口中并没有引入新方法,它提供的基本方接口中并没有引入新方法,它提供的基本方法和法和Collection接口类似。接口类似。_-1-1044_-1-1045Set接口派生了一个接口派生了一个SortedSet接口和一个抽象类接口和一个抽象类AbstractSet。SortedSet接口用来描述有序的元素集合,接口用来描述有序的元素集合,TreeSet实现了这个接口,它将放入其中的元素按序存实现了这个接口,它将放入其中的元素按序存放,要求其中的对象是可排序的。放,要求其中的对象是可排序的。抽象类抽象类Abstra

36、ctSet实现了部分实现了部分Collection接口,并有一接口,并有一个子类个子类HashSet,它以散列方式表示集合内容。,它以散列方式表示集合内容。 _-1-104613.5 树集树集 13.5.1 TreeSetTreeSet泛型类泛型类 TreeSet类创建的对象称作树集。类创建的对象称作树集。 例如例如 TreeSet mytree=new TreeSe(); TreeSet mytree=new TreeSe(); 然后使用然后使用addadd方法为树集添加节点,方法为树集添加节点,例如例如 mytree.add(boy); mytree.add(boy); _-1-10471

37、3.5.2 节点的大小关系节点的大小关系 树树集集用用addadd方方法法添添加加节节点点,节节点点会会按按其其存存放放的的数数据据的的“大大小小”顺顺序序一一层层一一层层地地依依次次排排列列,在在同同一一层层中中的的节节点点从从左左到到右右按按“大大小小”顺序递增排列,下一层的都比上一层的小。顺序递增排列,下一层的都比上一层的小。 _-1-104813.5.3 TreeSetTreeSet类的常用方法类的常用方法 public boolean add(E o)public boolean add(E o) 向树集添加加节点。向树集添加加节点。public void clear()public

38、 void clear() 删除树集中的所有节点。删除树集中的所有节点。public public void void contains(Object contains(Object o)o) 如如果果树树集集中中有有包包含含参参数数指指定定的的对对象象,该该方方法法返返回回truetrue,否则返回否则返回false false 。public E first()public E first() 返回树集中的第一个节点中的数据(最小的节点)。返回树集中的第一个节点中的数据(最小的节点)。public E last()public E last() 返回最后一个节点中的数据(最大的节点)。返回

39、最后一个节点中的数据(最大的节点)。public public isEmpty()isEmpty() 判判断断是是否否是是空空树树集集,如如果果树树集集不不含含任任何何节节点点,该该方方法法返返回回true true 。public public boolean boolean remove(Object remove(Object o)o) 删删除除树树集集中中的的存存储储参参数数指指定定的的对对象象的的最最小小节节点。点。public int size()public int size() 返回树集中节点的数目。返回树集中节点的数目。 例题例题13-813-8_-1-1049HashSet

40、类 HashSet类类是实现了是实现了Set接口的标准类,它创建了一个接口的标准类,它创建了一个使用哈希表存储的集合,能快速定位一个元素,从而使用哈希表存储的集合,能快速定位一个元素,从而可以优化查询的速度,特别是在查找大集合时可以优化查询的速度,特别是在查找大集合时HashSet类比较有用。类比较有用。HashSet的构造函数如下:的构造函数如下:HashSet():创建一个空的哈希集。创建一个空的哈希集。HashSet(Collection c):创建一个哈希集,并且将集合创建一个哈希集,并且将集合c中所有元素添加进去。中所有元素添加进去。HashSet(int initialCapaci

41、ty):创建一个拥有特定容量创建一个拥有特定容量的空哈希集。的空哈希集。HashSet(int initialCapacity,float loadFactor):创建创建一个拥有特定容量和加载因子的空哈希集。一个拥有特定容量和加载因子的空哈希集。_-1-1050泛型是泛型是JDK 1.5以上版本的新特性,以上版本的新特性,泛型的本质是参泛型的本质是参数化类型数化类型,也就是说所操作的数据类型被指定为一个,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。中,分别称为泛型类、泛

42、型接口和泛型方法。在在JDK 1.5之前,没有泛型的情况的下,通过对类型之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的的引用来实现参数的“任意化任意化”。“任意化任意化”带来的缺点是要做显式的强制类型转换,而这种转换带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提的。对于强制类型转换错误的情况,编译器可能不提示错误,但在运行的时候可能会出现异常,这是一个示错误,但在运行的时候可能会出现异常,这是一个安全隐患。泛型的引入很好地解决了这一问题。

43、安全隐患。泛型的引入很好地解决了这一问题。8.9 泛型程序设计泛型程序设计_-1-1051_-1-1052_-1-1053_-1-1054_-1-1055_-1-105613.7 自动装箱与拆箱自动装箱与拆箱 JDK1.5新新增增的的基基本本类类型型数数据据和和相相应应的的对对象象之之间间相相互互自自动动转转换换的的功功能能,称称作作基基本本数数据据类类型型的的自自动动装装箱箱与与拆拆箱箱(Autoboxing and Auto-Unboxing of Primitive Types)。 例题例题13-1013-10_-1-105713. 8 小结小结 1使使用用“class 名名称称”声声明

44、明一一个个泛泛型型类类,当当使使用用泛泛型型类类声声明明对对象象时时,必须要用具体的类型(不能是基本数据类型)替换泛型列表中的泛型。必须要用具体的类型(不能是基本数据类型)替换泛型列表中的泛型。2LinkedList泛泛型型类类创创建建的的对对象象以以链链表表结结构构存存储储数数据据,链链表表是是由由若若干干个个称称作作节节点点的的对对象象组组成成的的一一种种数数据据结结构构,每每个个节节点点含含有有一一个个数数据据以以及及上上一一个个节节点点的的引用和下一个节点的引用。引用和下一个节点的引用。3Stack泛泛型型类类创创建建一一个个堆堆栈栈对对象象,堆堆栈栈把把第第一一个个放放入入该该堆堆栈

45、栈的的数数据据放放在在最最底底下下,而而把把后后续续放放入入的的数数据据放放在在已已有有数数据据的的顶顶上上,堆堆栈栈总总是是在在顶顶端端进进行行数数据据的输入输出操作。的输入输出操作。4HashMap泛泛型型类类创创建建散散列列映映射射,散散列列映映射射采采用用散散列列表表结结构构存存储储数数据据、用用于于存存储储键键/值值数数据据对对,允允许许把把任任何何数数量量的的键键/值值数数据据对对存存储储在在一一起起。使使用用散散列列映射来存储经常需要检索的数据,可以减少检索的开销。映射来存储经常需要检索的数据,可以减少检索的开销。5TreeSet类类创创建建树树集集,树树集集节节点点的的排排列列和和链链表表不不同同,不不按按添添加加的的先先后后顺顺序序排排列列,当当一一个个树树集集中中的的数数据据是是实实现现Comparable接接口口类类创创建建的的对对象象时时,节节点点就按对象的大小关系升序排列。就按对象的大小关系升序排列。6TreeMap类类创创建建树树映映射射,树树映映射射的的节节点点存存储储“键键/值值”对对,和和树树集集不不同的是,树映射保证节点是按照节点中的同的是,树映射保证节点是按照节点中的“键键”升序排列。升序排列。_-1-1058

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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