Java 2实用教程第5版_第15章_泛型与集合框架

合集下载

java 泛型的三种定义与使用方法

java 泛型的三种定义与使用方法

java 泛型的三种定义与使用方法Java中的泛型主要有三种定义方式,分别是:类型参数、类型参数化类和类型参数化方法。

下面是它们的定义和使用方法:1. 类型参数:类型参数是泛型的主要形式,它允许我们在定义类、接口或方法时指定一个或多个类型参数。

这些类型参数在类、接口或方法的实现中被用作类型占位符,以便在运行时确定实际类型。

定义类型参数的方法是在类、接口或方法的名称后面加上尖括号<>,并在其中指定一个或多个类型参数。

例如:```javapublic class Box<T> {private T content;public Box(T content) {= content;}public T getContent() {return content;}}```在上面的例子中,我们定义了一个名为Box的泛型类,它有一个类型参数T。

我们可以使用任何类型来实例化Box对象,例如Box<Integer>、Box<String>等。

2. 类型参数化类:类型参数化类是将一个类作为泛型参数。

这种定义方式主要用于集合框架中的类,例如List、Set、Map等。

定义类型参数化类的方法是在类名后面加上尖括号<>,并在其中指定一个或多个类型参数。

例如:```javaList<String> list = new ArrayList<>();Set<Integer> set = new HashSet<>();Map<String, Integer> map = new HashMap<>();在上面的例子中,我们定义了三个类型参数化类:List、Set和Map,并使用它们创建了三个不同类型的对象。

这些对象在运行时会自动处理实际类型的匹配。

3. 类型参数化方法:类型参数化方法是在方法中使用泛型。

《Java 2实用教程(第5版)》

《Java 2实用教程(第5版)》

一、课程的性质和教学目的课程性质:Java不依赖平台的特点使得它受到广泛的关注,已成为网络时代最重要的编程语言之一。

目前,Java语言不仅是一门正在被广泛使用的编程语言,而且已成为软件开发人员应当掌握的一门基础语言,因为很多新的技术领域都涉及到了Java。

国内外许多大学已将Java语言列入了本科教学计划,掌握Java已经成为共识。

《Java程序设计》是软件工程专业、计算机科学与技术等相关专业的一门重要的程序设计语言类的必修课程。

教学目的:通过本课程的学习,要求学生达到下列目标。

1. 理解面向对象程序设计的思想,掌握面向对象的3个特性:封装性、继承性和多态性。

2. 理解Java的平台无关性,掌握用Java语言进行面向对象程序设计的方法。

3. 掌握Java中常用工具类的使用,及用Java设计图形用户界面程序的方法和技巧。

4. 培养学生应用Java解决和处理实际问题的思维方法与基本能力。

二、课程教学内容1. Java语言基础知识Java程序的开发环境;Java程序的基本结构;Java语言的基本数据类型、表达式、语句、数组。

Java 编程规范。

2. 类与对象类的定义,对象的创建和使用,对象的访问权限。

对象的封装性。

3. 继承、多态与接口子类的定义,继承的含义,方法的重写和接口及接口回调。

理解继承性、与多态性。

4. 字符串与常用类字符串,正则表达式,Data类,Math类和Calendar类。

5. GUI编程Java事件处理模型,常用组件的使用。

6. 输入、输出流Java 输入/出流类;文件和文件的读写。

掌握流的套接。

7. JDBCDerby数据库的实用,使用JDBC连接数据库的过程,进行查询、更新、插入数据的方法。

8.网络编程URL类 ,InetAdress类,套接字,UDP数据报9.集合框架三、课程教学的基本要求1.基本知识了解Java的特点,理解Java的平台无关性,掌握Java语言的语法知识和常用工具类的使用,掌握Java事件的处理模型及GUI编程。

Java面向对象程序设计第2版第13章_泛型与集合框架

Java面向对象程序设计第2版第13章_泛型与集合框架
◆ add(E obj) 向链表依次增加节点
2020/8/24
9
§13.2.2 常用方法
◆ LinkedList<E>泛型类实现Lis<E>泛型接口中的一些常用方法。
public boolean add(E element) 向链表末尾添加一个新的节点,该节点中的
数据是参数elememt指定的数据。
◆ 当用户需要遍历集合中的对象时,应当使用该集合提供的迭
代器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集 合的方法在找到集合中的一个对象的同时,也得到待遍历的后继 对象的引用,因此迭代器可以快速地遍历集合。
◆链表对象可以使用iterator()方法获取一个Iterator对象,
该对象就是针对当前链表的迭代器。 例题13-3
◆ JDK1.5 之 前 没 有 泛 型 的 LinkedList 类 , 可 以 用 普 通 的
LinkedList创建一个链表对象,如LinkedList mylist=new LinkedList(); Java泛型的主要目的是可以建立具有类型安全的集合框架,优
点就是:在使用这些泛型类建立的数据结构时,不必进行强制类 型转换,即不要求进行运行时类型检查。
2020/8/24
3
§13.1 泛型
泛型(Generics)是在JDK1.5中推出的,其 主要目的是可以建立具有类型安全的集合框架, 如链表、散列映射等数据结构。
2020/8/24
4
§13.1.1 泛型类声明
可以使用“class 名称<泛型列表>”声明一个类,为 了和普通的类有所区别,这样声明的类称作泛型类,如:
2020/8/24
8
§13.2.1 LinkedList<E>泛型类

Java-2实用教程(第5版)习题解答

Java-2实用教程(第5版)习题解答

习题解答习题1(第1章)一、问答题1.Java语言的主要贡献者是谁?2.开发Java应用程序需要经过哪些主要步骤?3.Java源文件是由什么组成的?一个源文件中必须要有public类吗?4.如果JDK的安装目录为D:\jdk,应当怎样设置path和classpath的值?5.Java源文件的扩展名是什么?Java字节码的扩展名是什么?6.如果Java应用程序主类的名字是Bird,编译之后,应当怎样运行该程序?7.有哪两种编程风格,在格式上各有怎样的特点?1.James Gosling2.需3个步骤:1)用文本编辑器编写源文件。

2)使用javac编译源文件,得到字节码文件.3)使用解释器运行程序.3.源文件由若干个类所构成。

对于应用程序,必须有一个类含有public static void main(String args [])的方法,含有该方法的类称为应用程序的主类.不一定,但至多有一个public类。

4.set classpath=D:\jdk\jre\lib\rt。

jar;.;5. java和class6. java Bird7。

独行风格(大括号独占行)和行尾风格(左大扩号在上一行行尾,右大括号独占行)二、选择题1.B。

2.D。

1.下列哪个是JDK提供的编译器?A)java。

exeB)javac.exeC) javap.exeD)javaw。

exe2.下列哪个是Java应用程序主类中正确的main方法?A)public void main (String args[])B)static void main (String args[ ])C) public static void Main (String args[])D)public static void main (String args[ ])三、阅读程序阅读下列Java源文件,并回答问题.public class Person {void speakHello(){System.out。

JAVA自学教程(完整版)PPT课件(2024)

JAVA自学教程(完整版)PPT课件(2024)

二分查找
针对有序数组,每次取中间元 素与目标元素比较,缩小查找 范围
12
03 面向对象编程基础
2024/1/27
13
类与对象的概念
类的定义
类是对象的模板,它定 义了对象的属性和方法 。
2024/1/27
对象的概念
对象是类的实例,具有 类定义的属性和行为。
类与对象的关系
类是对象的抽象描述, 而对象是类的具体实现 。
2024/1/27
32
Socket通信原理及示例
Socket通信原理
理解Socket通信的基本原理,掌握Socket 类和ServerSocket类的使用。
TCP编程
学习基于TCP协议的Socket通信,实现客户 端与服务器之间的数据传输。
多线程处理
掌握多线程在Socket通信中的应用,提高服 务器的并发处理能力。
TreeSet类的特点和使用
TreeSet是Set接口的另一个常用实现类,它基于红黑树实 现。TreeSet会对元素进行排序,因此它适用于需要排序的 场景。
26
Map接口及其实现类
01
Map接口的定义和特 点
Map接口表示一种键值对的映射关系 。Map中的每个元素都包含一个键和 一个值,键在Map中是唯一的。
学习ReentrantLock锁的使用,了解 公平锁与非公平锁的区别。
2024/1/27
等待/通知机制
掌握Object类的wait()、notify()和 notifyAll()方法的使用,实现线程间 的通信。
死锁与避免
了解死锁的概念及产生条件,学习如 何避免死锁的发生。
31
网络编程基础
网络编程概述
ArrayList类的特点和使用

学号姓名--集合框架与泛型实验报告

学号姓名--集合框架与泛型实验报告

浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称集合框架与泛型学生姓名专业班级学号一. 实验目的和要求1. 了解Java集合框架的接口和实现类2. 理解泛型类、泛型接口、泛型方法的特点3. 掌握List<E>接口及其实现类LinkedList<E>、ArrayList<E>4. 了解Set<E>接口及其实现类HashSet<E>、TreeSet<E>5. 了解Map<K,V>及其实现类HashMap<K,V>、TreeMap<K,V>二. 实验内容1. 分析Java集合框架的接口和实现类的组成2. 分析泛型类、泛型接口、泛型方法的特点3. 编程实现:设计学生管理类StudentManager(用List集合管理学生对象)4. 选作-编程实现:设计学生管理类StudentManager(用Set集合管理学生对象)5. 选作-编程实现:设计学生管理类StudentManager(用Map管理学生对象)三. 实验结果与分析(可将程序运行结果截屏,也可分析运行结果)1. 分析Java集合框架的接口和实现类的组成请查阅书籍和Java帮助文档,说明Java集合框架的接口组成以及它们的继承关系,并针对每个接口给出具体的实现类。

答:2. 分析泛型类、泛型接口、泛型方法的特点请查阅书籍和Java帮助文档,举例说明泛型类、泛型接口、泛型方法的特点。

答:3. 编程实现:设计学生管理类StudentManager(用List集合管理学生对象)。

StudentManager类的功能包括添加学生、查询学生、删除学生、统计学生成绩等。

需要设计表示学生对象的Student类,并用LinkedList或ArrayList集合来管理可被数量的学生对象。

另外还需要设计测试类Test来验证StudentManager的功能。

集合框架之泛型详解

集合框架之泛型详解

集合框架之泛型详解泛型(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完整课件

循环结构
for循环、while循环、do-while循环
异常处理
try-catch语句块
面向对象编程基础
03
类与对象
类的定义与对象的创建
this关键字与对象引用 封装性与访问控制
成员变量与成员方法 构造方法与初始化块
继承与多态
子类与父类的关系
继承的概念与实现
01
02
03
方法重写与方法重载
super关键字与父类引用
泛型的类型擦除
Java的泛型采用类型擦除的方式实现,即在编译 时将泛型信息擦除,替换为具体的类型。这种方 式可以保证与旧代码的兼容性,但也会带来一些 限制和问题,如无法创建泛型数组等。
多线程编程与网络编
06
程基础
多线程编程概述
01
多线程编程的概念
02
多线程编程的优势
03
多线程编程的挑战
多线程编程是指在一个程序中同时执行 多个线程,每个线程可以独立地执行不 同的任务,从而提高程序的并发性和效 率。
java完整课件
目 录
• 课程介绍与基础知识 • 数据类型、运算符与流程控制 • 面向对象编程基础 • 异常处理与文件操作 • 集合框架与泛型 • 多线程编程与网络编程基础 • JDBC数据库操作与Web开发入门
课程介绍与基础知识
01
Java语言概述
Java语言的历史与发展
01
介绍Java语言的起源、发展历程以及在不同领域的应用。
04
05
多态的概念与实现
接口与抽象类
接口的定义与实现 多重继承与接口的应用
接口与抽象类的区别与联 系
默认方法与静态方法
内部类与匿名内部类

java泛型方法

java泛型方法

java泛型方法Java泛型方法的介绍Java语言是一种使用泛型来提供类型安全性和重用代码的编程语言。

泛型方法是Java语言中的一种特殊语法,它允许在方法中定义一个或多个类型参数。

泛型方法使得我们可以在方法的声明和调用时指定参数的类型,从而实现代码的可重用性和类型安全性。

泛型方法的声明形式为:在方法返回类型之前加上`<T>`,`T`表示泛型类型。

在方法参数列表中可以使用`T`作为参数的类型,也可以使用`T`作为返回值的类型。

使用泛型方法的一个常见的场景是在集合类中的泛型类型参数的推断。

例如,我们可以定义一个泛型方法来计算集合中的最大元素:```javapublic static <T extends Comparable<T>> T getMax(List<T> list) {T max = list.get(0);for (int i = 1; i < list.size(); i++) {if (list.get(i).compareTo(max) > 0) {max = list.get(i);}}return max;}```在这个例子中,我们使用了一个类型参数`T`来表示集合中的元素类型。

`T`被限定为实现了`Comparable`接口的类型,这样我们就可以使用`compareTo()`方法来比较元素的大小。

在方法内部,我们先获取列表中的第一个元素作为初始的最大值,然后遍历列表中的其他元素,逐个比较并更新最大值。

通过泛型方法,我们可以在调用时指定实际类型的集合,而无需在方法中重复编写多个版本的代码。

例如,我们可以这样调用这个方法:```javaList<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int maxNumber = getMax(numbers);```这样就可以得到集合中的最大整数了。

Java泛型详解

Java泛型详解

Java泛型详解一. 泛型概念的提出(为什么需要泛型)?首先,我们看下下面这段简短的代码:复制代码复制代码1 public class GenericTest {23 public static void main(String[] args) {4 List list = new ArrayList();5 list.add("qqyumidi");6 list.add("corn");7 list.add(100);89 for (int i = 0; i < list.size(); i++) {10 String name = (String) list.get(i); // 111 System.out.println("name:" + name);12 }13 }14 }复制代码复制代码定义了一个List类型的集合,先向其中加入了两个字符串类型的值,随后加入一个Integer 类型的值。

这是完全允许的,因为此时list默认的类型为Object类型。

在之后的循环中,由于忘记了之前在list中也加入了Integer类型的值或其他编码原因,很容易出现类似于//1中的错误。

因为编译阶段正常,而运行时会出现“ng.ClassCastException”异常。

因此,导致此类错误编码过程中不易发现。

在如上的编码过程中,我们发现主要存在两个问题:1.当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。

2.因此,//1处取出集合元素时需要人为的强制类型转化到具体的目标类型,且很容易出现“ng.ClassCastException”异常。

那么有没有什么办法可以使集合能够记住集合内元素各类型,且能够达到只要编译时不出现问题,运行时就不会出现“ng.ClassCastException”异常呢?答案就是使用泛型。

Java2实用教程(第5版)最新答案-耿祥义

Java2实用教程(第5版)最新答案-耿祥义
}
HardDisk.java
public class HardDisk { int amount; int getAmount() {
return amount; } public void setAmount(int amount) {
this.amount = amount; } }
PC.java
} }
6. public class Xiti6 {
public static void main(String args[]) { int n=1; long sum=0; while(true) { sum=sum+n; n++; if(sum>=8888) break; } System.out.println("满足条件的最大整数:"+(n-1));
}
Test.java
public class Test { public static void main(String args[]) { CPU cpu = new CPU(); HardDisk HD=new HardDisk(); cpu.setSpeed(2200); HD.setAmount(200); PC pc =new PC(); pc.setCPU(cpu); pc.setHardDisk(HD); pc.show(); }
一、问答题 1.boolean 2.不可以 3.boolean 4. 不是必须的 5.结束 while 语句的执行 6.可以
二、选择题
1.A。 2.C。 3.C。
三、阅读程序
1.你,苹,甜 2.Jeep 好好 3.x=-5,y=-1
四、编程序题 1.public class Xiti1 {

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()

Java2实用教程2(第五版)耿祥义课后习题参考答案

Java2实用教程2(第五版)耿祥义课后习题参考答案

Java2实用教程2(第五版)耿祥义课后习题参考答案Java2(第5版)最新答案耿祥义第1章一、问答题1.James Gosling2.需3个步骤:1.用文本编辑器编写源文件。

2.使用javac编译源文件,得到字节码文件。

3.使用解释器运行程序。

3.由类所构成,应用程序必须有一个类含有public static void main(String args[])方法,含有该方法的类称为应用程序的主类。

不一定,但最多有一个public类。

4.set classpath=D:\jdk\jre\lib\rt.jar;.;5. java和class6. java Bird7.独行风格(大括号独占行)和行尾风格(左大扩号在上一行行尾,右大括号独占行)二、选择题1.B。

2.D。

三、阅读程序1.(a)Person.java。

(b)两个字节码,分别是Person.class 和Xiti.class。

(c)得到“NoSuchMethodError”,得到“NoClassDefFoundError: Xiti/class”,得到“您好,很高兴认识您nice to meet you”第2章一、问答题1.用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。

标识符由字母、下划线、美元符号和数字组成,第一个字符不能是数字。

false不是标识符。

2.关键字就是Java语言中已经被赋予特定意义的一些单词,不可以把关键字作为名字来用。

不是关键字。

class implements interface enum extends abstract。

3.boolean,char,byte,short,int,long,float,double。

4.float常量必须用F或f为后缀。

double常量用D或d为后缀,但允许省略后缀。

5.一维数组名.length。

二维数组名.length。

二、选择题1.C。

2.ADF。

Java 程序设计基础__第15章_泛型与集合框架

Java 程序设计基础__第15章_泛型与集合框架
◆ add(E obj) 向链表依次增加节点
2021/5/24
8
▪ §15.2.2 常用方法
◆ LinkedList<E>泛型类实现Lis<E>泛型接口中的一些常用方法。
public boolean add(E element) 向链表末尾添加一个新的节点,该节点中的数据是参
数elememt指定的数据。
例子4中,Student类通过实现Comparable接口规定该类的对象 的大小关系(按height值的大小确定大小关系,即学生按其身高 确 定 之 间 的 大 小 关 系 ) 。 链 表 添 加 了 3 个 Student 对 象 , Collections调用sort方法将链表中的对象按身其height值升序排序, 并查找一个对象的height值是否和链表中某个对象的height值相 同。运行效果如图15.5。
……
2021/5/24
9
▪ §15.2.3 遍历链表
◆ 当用户需要遍历集合中的对象时,应当使用该集合提供的迭
代器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集 合的方法在找到集合中的一个对象的同时,也得到待遍历的后继 对象的引用,因此迭代器可以快速地遍历集合。
◆ 链表对象可以使用iterator()方法获取一个Iterator对象,该对
2021/5/24
16
பைடு நூலகம்
▪ §15.4.3 遍历散列映射
public Collection<V> values() 方 法 返 回 一 个 实 现 Collection<V>接口类创建的对象。
使用接口回调技术,即将该对象的引用赋给 Collection<V>接口变量,该接口变量可以回调iterator() 方法获取一个Iterator对象,这个Iterator对象存放着散 列映 射中所有“键/值”对中的“值”。

java泛型详解-绝对是对泛型方法讲解最详细的,没有之一

java泛型详解-绝对是对泛型方法讲解最详细的,没有之一

java泛型详解-绝对是对泛型⽅法讲解最详细的,没有之⼀对java的泛型特性的了解仅限于表⾯的浅浅⼀层,直到在学习设计模式时发现有不了解的⽤法,才想起详细的记录⼀下。

本⽂参考java 泛型详解、Java中的泛型⽅法、 java泛型详解1. 概述泛型在java中有很重要的地位,在⾯向对象编程及各种设计模式中有⾮常⼴泛的应⽤。

什么是泛型?为什么要使⽤泛型?泛型,即“参数化类型”。

⼀提到参数,最熟悉的就是定义⽅法时有形参,然后调⽤此⽅法时传递实参。

那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于⽅法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使⽤/调⽤时传⼊具体的类型(类型实参)。

泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。

也就是说在泛型使⽤过程中,操作的数据类型被指定为⼀个参数,这种参数类型可以⽤在类、接⼝和⽅法中,分别被称为泛型类、泛型接⼝、泛型⽅法。

2. ⼀个栗⼦⼀个被举了⽆数次的例⼦:List arrayList = new ArrayList();arrayList.add("aaaa");arrayList.add(100);for(int i = 0; i< arrayList.size();i++){String item = (String)arrayList.get(i);Log.d("泛型测试","item = " + item);}毫⽆疑问,程序的运⾏结果会以崩溃结束:ng.ClassCastException: ng.Integer cannot be cast to ng.StringArrayList 可以存放任意类型,例⼦中添加了⼀个String类型,添加了⼀个Integer类型,再使⽤时都以String的⽅式使⽤,因此程序崩溃了。

Java 2实用教程(第5版)

Java 2实用教程(第5版)

教材特色
该教材注重可读性和实用性,配备了例题和习题。该教材采用JDK1.8(JDK8)。该教材针对较难理解的问题, 都是从简单到复杂,逐步深入地引入例子,便于读者掌握Java面向对象编程思想。
该教材是《Java2实用教程》的第5版,继续保留原教材的特点——注重教材的可读性和实用性,许多例题都 经过考虑,既能帮助理解知识,又具有启发性。
作者简介
耿祥义,1995年中国科学技术大学博士毕业,获理学博士学位。1997年从中山大学博士后流动站出站,大连 交通大学教授。有教授Java语言的经验。
谢谢观看
第8章讲述常用的实用类,包括字符串、日期、正则表达式、模式匹配以及数学计算等实用类,讲解了怎样使 用StringTokenizer、Scanner、Pattern和Matcher类解析字符串。
第9章介绍了组件的有关知识,把对事件处理的讲解分散到具体的组件,只要真正理解掌握了一种组件事件的 处理过程,就会掌握其他组件的事件处理。输入流、输出流是Java语言中的经典内容,尽管Java提供了二十多种 流,但它们的用法、原理却很类似。
该教材对部分章节的内容做了调整,删除了原第16章的有关JavaApplet的内容;特别修改了原第11章,将数 据库改为MySQL数据库。该教材由耿祥义、张跃平编著。
2017年5月1日,该教材由清华大学出版社出版。
内容简介
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与 实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制, Java络编程,图形、图像与音频,泛型与集合框架等内容。每章提供的二维码可观看相应章节的视频讲解。
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与 实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制, Java络编程,图形、图像与音频,泛型与集合框架等内容。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

概述
在jdk1.2之后,Java提供了实现常见数据结构的类,这些实现 数据结构的类通称为Java集合框架。在JDK1.5后,Java集合框 架开始支持泛型,本章首先介绍泛型,然后讲解常见数据结构 类的用法。
§15.1 泛型
泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建 立具有类型安全的集合框架,如链表、散列映射等数据结构。
链表对象可以使用iterator()方法获取一个Iterator对象,该对象 就是针对当前链表的迭代器。
例子2 比较了使用迭代器遍历链表和get(int index)方法遍历链 表的所用时间,运行效果如图15.4。
例子3 使用了JDK1.5版本之前的LinkedList。
§15.2.4 排序与查找
LinkedList<E>泛型类本身新增加的一些常用方法
– public void addFirst(E element) 向链表的头添加新节点,该节点中的数据 是参数elememt指定的数据。
– public void addLast(E element) 向链表的末尾添加新节点,该节点中的数 据是参数elememt指定的数据。
排序节点。
§15.7 自动装箱与拆箱
JDK1.5新增的基本类型数据和相应的对象之间相互自动转换的 功能,称作基本数据类型的自动装箱与拆箱(Autoboxing and Auto-Unboxing of Primitive Types)。
返回true,否则返回false。 public V remove(Object key) 删除散列映射中键为参数指定的“键/值”
对,并返回键对应的值。 public int size() 返回散列映射的大小,即散列映射中“键/值”对的数
目。
§15.4.3 遍历散列映射
public Collection<V> values()方法返回一个实现Collection<V> 接口类创建的对象。
象,该方法返回true,否则返回false 。 public E first() 返回树集中的第一个节点中的数据(最小的节
点)。 public E last() 返回最后一个节点中的数据(最大的节点)。 public isEmpty() 判断是否是空树集,如果树集不含任何节点,
该方法返回true 。 public 的存储参数指定的
例子7 是一个英语单词查询的GUI程序,用户在界面的的一个 文本框中输入一个英文单词回车确认,另一个文本框显示英文 单词的汉语翻译。例子7中使用一个文本文件word.txt来管理若 干个英文单词及汉语翻译
例子7 (Example15_7.java , WindowWord.java , WordPolice.java ,word.txt )
使用了参数指定的键,方法返回true,否则返回false。 public boolean containsValue(Object value) 如果散列映射有“键/值”
对的值是参数指定的值。 public V get(Object key) 返回散列映射中使用key做键的“键/值”对
中的值。 public boolean isEmpty() 如果散列映射不含任何“键/值”对,方法
§15.1.2 使用泛型类声明对象
泛型类声明和创建对象时,类名后多了一对“<>”,而且必须 要用具体的类型替换“<>”中的泛型。例如: – Cone<Circle> coneOne; – coneOne =new Cone<Circle>(new Circle());
例子1(Example15_1.java ,Cone.java , Rect.java , Circle.java )中, 声明了一个泛型类:Cone,一个Cone对象计算体积时,只关心 它的底是否能计算面积,并不关心底的类型。运行效果如图15.1。
例子4中,Student类通过实现Comparable接口规定该类的对象 的大小关系(按height值的大小确定大小关系,即学生按其身高 确定之间的大小关系)。链表添加了3个Student对象, Collections调用sort方法将链表中的对象按身其height值升序排 序,并查找一个对象的height值是否和链表中某个对象的height 值相同。运行效果如图15.5。
例子5 使用了shuffle()方法、reverse()方法和rotate()方法,运行 效果如图15.6。
§15.3 堆栈
堆栈是一种“后进先出”的数据结构,只能在一端进行输入或 输出数据的操作。
Stack<E>泛型类创建一个堆栈对象,堆栈对象常用方法: – public E push(E item);实现压栈操作 – public E pop();实现弹栈操作。 – public boolean empty();判断堆栈是否还有数据。 – public E peek();获取堆栈顶端的数据,但不删除该数据。 – public int search(Object data);获取数据在堆栈中的位置。
hashtable可以存储“键/值”对数据。 相关方法:
– public V put(K key,V value)将键/值对数据存放到散列映射中,该 方法同时返回键所对应的值。
§15.4.2 常用方法
public void clear() 清空散列映射。 public Object clone() 返回当前散列映射的一个克隆。 public boolean containsKey(Object key) 如果散列映射有“键/值”对
– public E getFirst() 得到链表中第一个节点中的数据。 – public E getLast() 得到链表中最后一个节点中的数据。 – public E removeFirst() 删除第一个节点,并返回这个节点中的数据。
§15.2.3 遍历链表
当用户需要遍历集合中的对象时,应当使用该集合提供的迭代 器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集 合的方法在找到集合中的一个对象的同时,也得到待遍历的后 继对象的引用,因此迭代器可以快速地遍历集合。
树集用add方法添加节点,节点会按其存放的数据的“大小” 顺序一层一层地依次排列,在同一层中的节点从左到右按“大 小”顺序递增排列,下一层的都比上一层的小。
§15.5.3 TreeSet类的常用方法
public boolean add(E o) 向树集添加加节点。 public void clear() 删除树集中的所有节点。 public void contains(Object o) 如果树集中有包含参数指定的对
Collections类提供的用于排序和查找的类方法如下:
– public static sort(List<E> list) 该方法可以将list中的元素升序排列。 – int binarySearch(List<T> list, T key,CompareTo<T> c) 使用折半法
查找list是否含有和参数key相等的元素,如果key链表中某个元素相 等,方法返回和key相等的元素在链表中的索引位置(链表的索引 位置从0考试),否则返回-1。
§15.1.1 泛型类声明
可以使用“class 名称<泛型列表>”声明一个类,为了和普通的 类有所区别,这样声明的类称作泛型类,如: – class People<E>
其中People是泛型类的名称,E是其中的泛型,也就是说我们 并没有指定E是何种类型的数据,它可以是任何对象或接口, 但不能是基本类型数据。
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中,即不要移动文件夹 “代码”的默认位置
第15章 泛型与集合框架
配合例子源代码一起使用
课件制作人: 张跃平
主要内容
导读
– 泛型
– 链表
– 堆栈
– 散列映射
– 树集
– 树映射
重点和难点
– 重点:泛型和集合的使用
– 难点:集合的使用
– public void add(int index ,E element) 向链表的指定位置添加一个新的节点, 该节点中的数据是参数elememt指定的数据。
– public void clear() 删除链表的所有节点,使当前链表成为空链表。 – public E remove(int index) 删除指定位置上的节点。 – public boolean remove(E element) 删除首次出现含有数据elemen的节点。 – public E get(int index) 得到链表中指定位置处节点中的数据。
§15.5 树集
§15.5.1 TreeSet<E>泛型类 TreeSet<E>类创建的对象称作树集。
例如 TreeSet<String> mytree=new TreeSe<String>();
然后使用add方法为树集添加节点,例如 mytree.add("boy");
§15.5.2 节点的大小关系
使用接口回调技术,即将该对象的引用赋给Collection<V>接口 变量,该接口变量可以回调iterator()方法获取一个Iterator对象, 这个Iterator对象存放着散列映 射中所有“键/值”对中的 “值”。
§15.4.4 基于散列映射的查询
对于经常需要进行查找的数据可以采用散列映射来存储这样的 数据,即为数据指定一个查找它的关键字,然后按着“健-值” 对,将关键字和数据一并存入散列映射中。
§15.2.5 洗牌与旋转
相关文档
最新文档