第12章泛型与集合框架

合集下载

集合框架和泛型专题讲座

集合框架和泛型专题讲座
31 / 38
24/17
练习2:使用泛型修改根据学员姓名找学员对象
需求说明
学员应聘至外企工作,每个学员都会有一个英文名称, 对应该学员对象。请实现通过英文名称,获得该学员对 象的详细信息
学员属性包括姓名以及性别 通过泛型解决该问题
32/ 38
25/17
总结
Collection 、List 、Set 、Map接口的联系和区别 遍历集合的方法 泛型集合用法及好处
19/ 38
12/21
Set接口1
Set接口存储一组唯一,无序的对象
HashSet是Set接口常用的实现类
Set中存放对象的引用
Set set=new HasБайду номын сангаасSet();
String s1=new String("java");
String s2=s1;
String s3=new String("JAVA");
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String ("java");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());
使用集合类
需要遍历元素 类型:新闻标题
属性:ID、名称、创建者
演示示例1:ArrayList获取并打印新闻标题
11 / 38
6/21
ArrayList集合类2
确定存储方式
ArrayList类是List接口的一个具体实现类 ArrayList对象实现了可变大小的数组 随机访问和遍历元素时,它提供更好的性能

JAVA集合框架与泛型

JAVA集合框架与泛型

集合框架1,集合概述为了保存数量不确定的数据,以及保存具有映射关系的数据,Java提供了集合类,集合类主要保存、盛装其它数据(集合里只能保存对象,实际上保存的是对象的引用变量),因此集合类也被称为容器类。

Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类,所有的集合类都位于java.util包下。

下图是部分集合框架的梗概:2,CollectionCollection接口是List、Set和Queue接口的父接口,该接口里定义了List、Set和Queue 的共性方法,必须要掌握。

2.1,boolean add(Object o):用于向集合中添加元素,如果集合对象被添加操作改变了,则返回true。

2.2,boolean addAll(Collection c):将集合c里的所有元素添加到指定的集合里,如果集合被添加操作改变了,返回true。

2.3,void clear():清除集合里的所有元素。

2.4,bolean contains(Object o):返回集合里是否包含指定元素。

2.5,boolean containsAll(Collection c):返回集合里是否含集合c里的所有元素。

2.6,boolean isEmpty():返回集合是否为空。

当集合长度为0时,返回true;否则返回false。

2.7,Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。

2.8,boolean remove(Object o):删除集合中指定元素o,当集合中包含了一个或多个元素o 时,全部删除,返回true。

2.9,boolean removeAll(Collection c):从该集合中删除集合c里包含的元素,删除一个或一个以上元素,返回true。

2.10,boolean retainAll(Collection c):从该集合中删除集合c里不包含的元素,取交集,操作改变了该集合,返回true。

Java语言程序设计-容器框架与泛型

Java语言程序设计-容器框架与泛型
Ø 哈希映射:HashMap和LinkedHashMap
【例12.4】哈希映射演示。
12.5 常用映射类
Ø 树形映射:TreeMap
TreeMap采用了红黑树的结构来存取映射中的元素。
TreeMap实现了NavigableMap(可导航的映射)接口,而后者又 继承自SortedMap接口,因此,TreeMap允许对映射中的元素按照 键来排序。
12.1 核心接口
Ø 遍历容器
5. 通过Iterable接口的forEach默认方法 从JDK 8开始,Iterable接口增加了名为forEach的默认方法,该方 法以方式4的形式封装了迭代逻辑,以支持近年来重新开始流行的 函数式编程风格。
forEach方法接受一个Consumer类型的参数,而后者是函数式接口, 因而可以直接使用Lambda表达式作为forEach方法的参数。
与前述TreeSet一样,TreeMap也支持以(键的)自然顺序或自定 义顺序对元素进行排序,具体则取决于创建TreeMap对象时所使 用的构造方法。
【表12-8 】
12.6 遗留容器类
Java容器框架是从JDK 1.2开始出现的,在此之前的JDK中只有一些 简单的、零散的容器类,包括Vector、Stack和Hashtable等,通常 将这些类称为遗留容器类。
Comparator接口所定义的int compare(Object o1, Object o2)方法的 返回值意义与上述compareTo方法是一致的。
12.3 案例实践13:产品排序
【案例实践13】分别采用自然排序和自定义排序,对包含若干产 品的树形集合进行排序。
12.4 常用列表类
列表允许包含重复元素 (包括空对象),有两个常用的List接口实现 类——ArrayList和LinkedList,它们分别对应着列表的顺序存储方 式和链式存储方式。

Java程序设计 项目5Java泛型与集合框架

Java程序设计  项目5Java泛型与集合框架

任务1 泛型
例5.3 泛型接口的应用。
public class MyClassTest{ public static void main(String args[]){ Integer inums[] = {56,47,23,45,85,12,55}; Character chs[] = {'x','w','z','y','b','o','p'}; MyClass<Integer> iob = new MyClass<Integer>(inums); MyClass<Character> cob = new MyClass<Character>(chs); System.out.println("Max value in inums: "+iob.max()); System.out.println("Min value in inums: "+iob.min()); System.out.println("Max value in chs: "+cob.max()); System.out.println("Min value in chs: "+cob.min()); } } 出现运行结果为: Max value in inums: 85 Min value in inums: 12 Max value in chs: z Min value in chs: b
任务1 泛型
接下来我们定义一个类MyClass来实现这个接口,代码如下:
class MyClass<T extends Comparable<T>> implements MinMax<T>{ T[] vals; MyClass(T[] ob){ vals = ob; } public T min(){ T val = vals[0]; for(int i=1; i<vals.length; ++i) if(vals[i].compareTo(val)<0)val=vals[i]; return val; } public T max(){ T val = vals[0]; for(int i=1;i<vals.length;++i) if (vals[i].compareTo(val)>0)val=vals[i]; return val; } }

训练师脚本:如何使用集合和泛型集合

训练师脚本:如何使用集合和泛型集合

脚本_ 如何使用集合和泛型集合第1页PPT(训练师站在演讲台正中央,精神饱满,声音洪亮)大家好,今天我们来学习ArrayList和Hashtable 。

(切换PPT)第2页PPT数组有哪些局限呢,数组是固定大小的,不能伸缩。

虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。

随后以前的数组就废弃!而集合却是可变长的。

数组要声明元素的类型,集合类的元素类型却是object。

数组可读可写不能声明只读数组。

集合类可以提供ReadOnly方法以只读方式使用集合。

数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。

集合也是数据列表却不使用下标访问。

很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!(切换PPT)第3页PPT能否维护一个动态维护长度的集合呢?我们今天学习新的对象ArrayListList,在新增元素操作时,ArrayList的容量可以根据需要自动扩充,它的索引会根据你的扩展而重新进行分配和调整。

所有我们说ArrayList是动态的数组,可以动态的增加数组的长度,对应保存未知个数的一系列数据使用ArrayList非常方便。

(切换PPT)第4页PPTArrayList非常类似于数组,常有人称之为数组列表,其类来自于System.Collections 命名空间。

由于数组的容量是固定的,这样当我们想添加新的元素时,需要对数组重新进行定义。

为了避免这样的麻烦,我们提出了ArrayList。

(切换PPT)如何在ArrayList中添加元素呢,首先实例化对象,然后使用Add方法添加元素。

具体添加的方法ArrayList对象。

在调用对应的Add方法。

代码演示MySchool,讲解添加元素的方法。

(切换PPT)第6页PPT如何访问ArrayList的元素呢,通过指定索引下标,来取得对象,ArrayList第一个对象的索引是0,但是取到ArrayList里存放的数据后,不能直接赋值给Student对象,需要牵制进行类型转换。

Java程序设计实用教程_第12章(第2版)泛型与集合框架

Java程序设计实用教程_第12章(第2版)泛型与集合框架

2017/8/16
8
§12.2 链表 链表是由若干个称作节点的对象组成的一种 数据结构,每个节点含有一个数据和下一个节 点的引用 。
2017/8/16
9
§12.2.1 LinkedList<E>泛型类
◆ LinkedList<E> 泛型类创建的对象以链表结构存储数据,习
惯上称LinkedList类创建的对象为链表对象。例如, LinkedList<String> mylist=new LinkedList<String>(); 创建一个空双链表。 ◆ add(E obj) 向链表依次增加节点 例如: list.add("你好"); list.add("十一快乐"); list.add("注意休息");
2017/8/16
10
§12.2.2 常用方法
◆ LinkedList<E>泛型类实现Lis<E>泛型接口中的一些常用方法。
public boolean add(E element) 向链表末尾添加一个新的节点,该节点中的数
据是参数elememt指定的数据。
public void add(int index ,E element) 向链表的指定位置添加一个新的节点,
2017/8/16
3
§12.1 泛型 泛型(Generics)是在JDK1.5中推出的,其 主要目的是可以建立具有类型安全的集合框架, 如链表、散列映射等数据结构。
2017/8/16
4
§12.1.1 泛型类
可以使用“class 名称<泛型列表 >”声明一个类 ,为 了和普通的类有所区别,这样声明的类称作泛型类 , 如:

集合框架之泛型详解

集合框架之泛型详解

集合框架之泛型详解泛型(Generics)什么是泛型?泛型是在jdk1.5以后出现的新特性,用于解决安全问题,是一个类型安全机制。

泛型格式:通过<>来定义要操作的引用数据类型。

例如以下的例子:import java.util.*;class GenericsDemo{public static void main(String[] args){ArrayList<String> list=new ArrayList<String>();list.add("zhangsan");list.add("lisi");list.add("huangsan");//list.add(new Integer(3));//会出编译时错误for(Iterator<String> it=list.iterator();it.hasNext();){String s=it.next();System.out.println(s);}}}我们可以看到使用泛型有很多好处。

a)将运行时期出现问题ClassCastException,转移到了编译时期。

方便程序员解决问题。

让运行时期问题减少,安全。

b)避免了强制转换的麻烦。

什么时候使用泛型呢?是在使用java提供的API的一些对象时,只要见到<>就要定义泛型,通常在集合框架中很常见。

<>就是用来接受类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

自定义泛型自定义泛型类自定义泛型有什么好处呢?自定义泛型最大的好处就是扩展性好。

我们看看如下的例子:class GenericsTool<T>{private T t;public T getObject(){return t;}public void setObject(T t){this.t=t;}}class CustomGenericsDemo{public static void main(String[] args){/*Objcet*/ObjectTool ot=new ObjectTool();ot.setObject(new Student());Student stu=(Student)ot.getObject();/*Generics,T也可以是Student*/GenericsTool<Person> gt=new GenericsTool<Person>();gt.setObject(new Person());Person p=gt.getObject();//不需要强制转换}}我们可以看出自定义泛型的可扩展性高。

JAVA集合框架和泛型

JAVA集合框架和泛型
第12页/共37页
串讲:ArrayList与LinkedListList分别在何时使用?
ArrayList
遍历元素和随机访问元 素的效率比较高 插入、删除等操作频繁 时性能低下
LinkedList
插入、删除元素时 效率较高 查找效率较低
第13页/共37页
串讲: Set接口
虚线框表示接口
实线框表示实现类
Java集合框架共有三大类接口: List、Set、Map
第7页/共37页
串讲:List接口
集合框架
List 接口存储一组不唯一,有序(插入顺序)的对象
ArrayList类实现了长度可变的数组,在内存中分配连 续的空间。遍历元素和随机访问元素的效率比较高
LinkedList类采用链表存储方式。插入、删除元素时效 率比较高
第27页/共37页
上机练习
练习
需求说明
使用泛型集合改进查询诗的信息的上机练习,实现对 诗的信息的存储和查询功能。
完成时间:10分钟 共性问题集中讲解
第28页/共37页
讲解:泛型的其他应用-泛型接口
泛型接口就是拥有一个或多个类型参数的接口
语法
public interface 接口名<类型形参> { 方法名(类型形参 类型形参实例); }
第一单元
第一章
集合框架和泛型
第1页/共37页
本门课程目标
学完本门课程后,你能够: 运用Java常用API编写程序 通过Java 程序来操作文件 开发基于多线程的程序 开发Java 服务器/客户端程序并实现通信 定义并解析XML 文件 具有独立分析问题和解决问题的能力,能够胜任 Java 程序的开发
第2页/共37页
本章相关学习资源

如何使用泛型与泛型集合

如何使用泛型与泛型集合

如何使用泛型与泛型集合泛型是一种在编程中广泛应用的概念,它使得代码更灵活,可重用,并提高了代码的类型安全性。

在这篇文章中,我们将详细介绍什么是泛型以及如何使用泛型和泛型集合。

一、什么是泛型泛型是一种参数化类型的概念,它可以在类、接口、方法中使用。

它允许我们在编译时指定类型参数的具体类型,从而实现代码的重用和灵活性。

泛型的主要优点是:1.类型安全:使用泛型可以在编译时进行类型检查,避免运行时出现类型错误。

2.代码重用:泛型允许我们编写通用的算法和数据结构,在不同的类型上重用。

3.程序可读性提高:泛型代码可以提高程序的可读性和可维护性,因为代码中的类型信息更明确。

二、使用泛型1.声明泛型类在 Java 中,我们可以通过在类名后面使用尖括号插入类型参数来声明泛型类。

例如:```public class GenericClass<T>private T value;public T getValureturn value;}public void setValue(T value)this.value = value;}```上面的代码中,`GenericClass` 是一个泛型类,`<T>` 表示类型参数,可以在类的其他成员中使用这个类型参数。

2.使用泛型类使用泛型类时,需要通过实际类型替换类型参数。

例如:```GenericClass<Integer> genericClass = new GenericClass<>(;genericClass.setValue(10);System.out.println(genericClass.getValue(); // 输出 10```在上面的代码中,`GenericClass<Integer>` 表示实际的类型参数是`Integer`,所以 `setValue` 方法只接受 `Integer` 类型的参数。

Java程序设计课件:泛型与集合

Java程序设计课件:泛型与集合
15/35 2023/12/28
List的常用方法
方法名 add(int index, E element) addAll(int index, Collection<?
extends E> c) get(int index)
indexOf(Object o)
lastIndexOf(Object o)
程序员使用集合框架提供的接口和类,在具体应 用时,不必考虑这些数据结构算法的实现细节, 只需用这些类创建对象并直接应用即可,这大大 提高了编程效率。
2023/12/28
8/35
6.2.1集合框架
核心接口主要有Collection、List、Set、 Queue、Deque和Map。
Collection
方法名 add(E e) clear() equals(Object o) isEmpty() size() iterator() hashCode() toArray() removeAll(Collection<?> c) retainAll(Collection<?> c) contains(Object o) remove(Object o) containsAll(Collection<?> c)
将集合 c中的所有元素添加到当前集合中,添加成功 返回true。
11/35 2023/12/28
Set 接口
Set接口用来描述数据结构中的集合。它具有 与 Collection 完全一样的接口,只是Set 不 保存重复的元素,向Set添加元素时,不保证 元素添加后与添加的顺序一致。实现它的常 用子类有TreeSet类和HashSet类。
remove(int index) set(int index, E element) listIterator()

泛型与集合框架介绍

泛型与集合框架介绍

7.4 LinkedList<E>泛型类
public
E set(int index,E element)——将当前链表index位
置节点中的对象替换为参数element 指定的对象,并返回被替换的对象。 public int size()——返回链表的 长度,即节点的个数。
7.4 LinkedList<E>泛型类
7.4 LinkedList<E>泛型类
使用LinkedList<E>泛型类可以创建 链表结构的数据对象。链表是由若干个 节点组成的一个种数据结构,每个节点 含有一个数据和下一个节点的引用(单 链表),或含有一个数据以及上一个节 点的引用和下一个节点的引用(双链 表),节点的索引从0开始。链表适合动 态改变它存储的数据,如增加、删除节 点等。
7.4 LinkedList<E>泛型类
3、遍历链表 在例7-7中借助get()方法实现了遍历链 表。我们可以借助泛型类Iterator<E>实 现遍历链表,一个链表对象可以使用 iterator()方法返回一个Iterator<E>类型 的对象,该对象中每个数据成员刚好是 链表节点中的数据,而且这些数据成员 是按顺序存放在Iterator对象中的。
7.4 LinkedList<E>泛型类
public
E removeLast()——删除链 表中最后一个节点,并返回这个节 点中的对象。 public E get(int index)——得到 链表中指定位置处节点中的对象。 public E getFirst()——得到链表 中第一个节点的对象。
什么是链表?
以链式结构存储的线性表称之为线性链

集合框架和泛型

集合框架和泛型

集合框架:容器:存东西用的。

数组:也是存东西的。

用数组存东西,访问数据速度最快,但修改速度慢。

并且长度不可变。

另外还有一些像链表、树、二叉树、平衡二叉树、红黑树等数据结构。

集合框架就是在这些数据结构之上,加了一些方法,进行包装。

首先记住几个接口(查看API)Collection、Set、List、Map集合框架结构:简略图:集合及其实现类详细图:Collection接口:List接口:(继承Collection接口)List:元素都是有序的(时间顺序),并且元素可以重复。

List集合代表一个有序集合,集合中每个元素都有其对应的的顺序。

允许有重复元素,可以通过索引来访问指定位置的集合元素。

因为List集合默认按元素的添加顺序设置元素的索引,第一次添加的元素索引为0.数组初始化时需要指定大小,而list不需要指定大小。

(可以指定,但不需要指定,指定了也没用)如果不指定大小,它可一直往里边装内容,除非内存装不开。

ArrayList和vector是List接口的经典实现,完全直接list的全部功能。

List接口的具体实现类:ArrayList:List接口的大小可变数组的实现。

除了实现List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。

下面是ArrayList类的一些方法实例:(具体的可查看API文档)publicclass TestArrayList {publicstaticvoid main(String[] args) {TestArrayList ta = new TestArrayList();ta.test();}publicvoid test(){ArrayList list = new ArrayList();list.add("a");list.add("c");list.add("e");list.add(3, "h");//指定索引处插入// list.remove(1);//指定索引处删除// list.remove("a");//指定具体指删除boolean flag = list.contains("b");//判断集合中是否包含bSystem.out.println(flag);printList(list);}publicvoid printList(List list){for (int i = 0; i < list.size(); i++) {String s = (String) list.get(i);System.out.println(s);}}}Vector:又叫同步容器。

Java面试必备Java中的集合框架

Java面试必备Java中的集合框架

Java面试必备Java中的集合框架Java中的集合框架是开发中至关重要的一部分,无论是在面试中还是实际开发中,对于集合框架的掌握都是必不可少的。

本文将介绍Java中的集合框架,包括其基本概念和常用的集合类型。

一、什么是集合框架集合框架是Java提供的一组接口和类,用于存储和操作一组对象。

它提供了一套标准的数据结构和算法,可以方便地处理和操作数据。

集合框架可以分为两个基本接口:Collection和Map。

二、Collection接口Collection接口是Java集合框架中最基本的接口,它提供了一系列方法来操作一组对象。

常见的Collection接口的实现类有List、Set和Queue。

1. ListList是一个有序的集合,可以包含重复的元素。

它的常见实现类有ArrayList、LinkedList和Vector。

ArrayList是一个动态数组,它的元素存储在一个数组中,可以方便地进行随机访问。

LinkedList是一个双向链表,它的元素通过节点进行连接,可以方便地进行插入和删除操作。

Vector是一个线程安全的动态数组,它的操作都是同步的。

2. SetSet是一个无序的集合,不可以包含重复的元素。

它的常见实现类有HashSet、TreeSet和LinkedHashSet。

HashSet是基于哈希表实现的,它可以快速地进行插入和查找操作。

TreeSet是基于红黑树实现的,它的元素将按照自然顺序进行排序。

LinkedHashSet是基于哈希表和双向链表实现的,它的元素按照插入的顺序进行排序。

3. QueueQueue是一个先进先出的集合,可以用来模拟队列的行为。

它的常见实现类有LinkedList和PriorityQueue。

LinkedList可以作为队列和栈来使用,它可以在队列两端进行插入和删除操作。

PriorityQueue是一个基于优先级堆实现的队列,它的元素将按照优先级进行排序。

第12章泛型与集合框架

第12章泛型与集合框架

Collections类
注意区分和Collection接口的的区别 Collections是一个类,该类里的 方法都是静态 的方法,主要是用来对集合的操作的。 是个非常有用的类
import java.util.*; public class Example12_3 { public static void main(String args[ ]){ List<String> list=new LinkedList<String>(); list.add("大家好"); list.add("国庆60周年"); list.add("十一快乐"); Iterator<String> 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;i<list.size();i++){ String te=list.get(i); System.out.print(te+" "); }}}
Java集合框架
在Java语言中,设计者对常用的数据结构和算 法做了一些规范(接口)和实现(具体实现接口 的类)。 所有抽象出来的数据结构和算法统称为Java集 合框架 Java程序员在具体应用时,不必考虑数据结构 和算法实现细节,只需要用这些类创建出来的一 些对象,然后直接应用就可以了,提高了编程效 率
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

12.2.3 遍历链表
当用户需要遍历集合中的对象时,应当使用该集 合提供的迭代器,而不是让集合本身来遍历其中 的对象。由于迭代器遍历集合的方法在找到集合 中的一个对象的同时,也得到待遍历的后继对象 的引用,因此迭代器可以快速地遍历集合。
什么是迭代器
迭代器是一个实现了Iterator接口的类的对象 所有实现了Collection接口的类都有一个名称为
public class Example12_1 { public static void main(String args[ ]) { ShowObject<Dog> showDog = new
ShowObject<Dog>(); showDog.showMess(new Dog()); ShowObject<Cat> showCat = new

}
}
Java集合框架
在Java语言中,设计者对常用的数据结构和算 法做了一些规范(接口)和实现(具体实现接口 的类)。
所有抽象出来的数据结构和算法统称为Java集 合框架
Java程序员在具体应用时,不必考虑数据结构 和算法实现细节,只需要用这些类创建出来的一 些对象,然后直接应用就可以了,提高了编程效 率
LinkedList<String> list = new LinkedList<String>();
创建一个空双链表。 使用LinkedList<E>泛型类声明创建链表时,必
须要指定E的具体类型,然后链表就可以使用 add(E o“你好”); list.add(“十一快乐”); list.add(“注意休息”); 此时,链表里有3个节点,节点自动链接在一起
以下是LinkedList<E>泛型类本身新增加的一些 常用方法
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()
JDK1.5是支持泛型的编译器,它将运行时的类 型检查提前到编译时执行,使代码更安全。
12.1.1 泛型类
可以使用“class 名称<泛型列表>”声明一个类, 为了和普通的类有所区别,这样声明的类称作泛 型类,如:
class ShowObject<E> E是其中的泛型,也就是并没有指定E是何种类
素效率高。
说明
Set的子类: HashSet 以哈希表的形式存放元素,插入删除速度很快 TreeSet 保持次序的Set,底层为树结构。使用它可以从
Set中提取有序的序列。 List的子类: ArrayList:动态数组(顺序结构) LinkedList:链表(链式结构)

String te=iter.next();

System.out.print(te+" ");
}
System.out.println("");
long endTime=System.currentTimeMillis();
for(int i=0;i<list.size();i++){
型 泛型类的类体和和普通类的类体完全类似,由成
员变量和方法构成
举例
public class ShowObject<E>{

public showMess(E b){

String mess=b.toString();

System.out.println(mess);

}

}
12.1.2 泛型类声明对象
Collections类
注意区分和Collection接口的的区别 Collections是一个类,该类里的 方法都是静态
的方法,主要是用来对集合的操作的。 是个非常有用的类
String类实现了泛型接口Comparable<E>中的 compareTo(E b)方法,使得字符串可以按字典 序比较大小,如果一个链表list如下添加节点:
Rabbit
Car
Student
例12-4
使用了JDK1.5版本之前的LinkedList
12.2.4 排序与查找
如果链表中的数据是实现了Comparable接口的 类的实例,比如String对象,那么Java.util包中 的Collections类调用sort(List<E> list)方法可 以对参数指定的列表进行排序,即按节点中的存 储的对象的大小升序排列节点。
使用集合框架注意事项(没有使用泛型)
任何对象加入集合类后,自动转变为Object类型;取出 时,需要进行强制类型转换,恢复为特定的类型
Rabbit
Car
Student
加入集合
从集合中取出
Object
Object
(Rabbit) object (Car) object
Object (Student) object

Student zhang=new Student();

System.out.println("学生听:");

zhang.listen(new Piano());

Teacher teacher=new Teacher();

System.out.println("老师听:");

teacher.listen(new Violin());
例12-3
List<String> list=new LinkedList<String>();
list.add("大家好");
list.add("国庆60周年");
list.add("十一快乐");
Iterator<String> iter=list.iterator();
while(iter.hasNext()){
集合框架的层次结构
说明
Collection是集合接口,集合框架的根,代表一组 Object
Set子接口:里面的元素不允许重复 List子接口:里面的元素可以重复
说明
Set和List对比: Set:检索元素效率低下,删除和插入效率高。 插入和删除不会引起元素位置改变 List:和数组类似,List可以动态增长,查找元
iterator()的方法来获取迭代器 链表对象可以使用iterator()方法获取一个
Iterator对象,该对象就是针对当前链表的迭代 器 next方法:返回迭代器中的一个元素 hasNext方法:如果容器里还有元素,则为true
import java.util.*; public class Example12_3 { public static void main(String args[ ]){

String te=list.get(i);

System.out.print(te+" ");
}}}
JDK1.5之前没有泛型的LinkedList类,可以用 普通的LinkedList创建一个链表对象,如
LinkedList mylist=new LinkedList();
然后mylist链表可以使用add(Object obj)方法向 这个链表依次添加节点。由于任何类都是Object 类的子类,因此可以把任何一个对象作为链表节 点中的对象
第12章泛型与集合框架
12.1 泛型
泛型(Generics)是在JDK1.5中推出的,其主 要目的是可以建立具有类型安全的集合框架,如 链表、散列映射等数据结构
泛型的目的
Java泛型的主要目的是可以建立具有类型安全 的数据结构,如链表、散列表等数据结构,最重 要的一个优点就是:在使用这些泛型类建立的数 据结构时,不必进行强制类型转换,即不要求进 行运行时类型检查。
ShowObject<Cat>(); showCat.showMess(new Cat()); } }
说明
泛型类中的泛型变量只能调用Object类中的方法, 因此Cat和Dog类都重写了Object类的toString() 方法。
12.1.3 泛型接口
可以使用“interface 名称<泛型列表>”声明一 个接口,这样声名的接口称作泛型接口如
interface Listen<E> { void listen(E x); } 注:普通类实现泛型接口时,必须指定泛型接口
中泛型列表中的具体类型
例12-2
interface Listen<E> {

void listen(E x);
}
class Student implements Listen<Piano> {

public void listen(Piano p) {

p.play();

}
}
class Teacher implements Listen<Violin> {

public void listen(Violin v) {

v.play();

}
}
class Piano {
相关文档
最新文档