当前位置:文档之家› 11 使用泛型和集合框架_Java

11 使用泛型和集合框架_Java

11 使用泛型和集合框架_Java
11 使用泛型和集合框架_Java

第11章

使用泛型和集合框架

目标

当完成本章后,你应该能够:

?了解集合

?了解并使用List接口

?了解并使用Set接口

?了解并使用Map接口

?了解遗留的集合类

?通过实现Comparable 和Comparator 接口创建自然排序和自定义排序

?使用泛型集合

?了解泛型类中类型参数的使用

?重构已存在的非泛型代码

?编写对集合进行迭代的程序

?了解增强型for 循环

Collection与Map接口

?集合(collection)是个管理一组对象的单一对象。在集合内的对象称之为元素(elements)。通常,集合可以处理很多种类型的对象,这些类型的对象都属于一个特定的类型( 也就是说,它们具有共同的父类型)。

?集合API 包含了如下将对象组为一体的接口:

●Collection ——一组称之为元素的对象;其实现决定了是否有特定的顺序和是否允

许有重复元素。

●List

——有顺序的集合;可允许元素重复●Set

——没有顺序的集合;不允许元素重复

元素的类型

?在Java SE 5.0 发布以前,集合维护对Object 类型的对象的引用。这可以使任何对象存放在集合内。从集合中获取对象后,在使用之前必须先正确使用强制类型转换。但是,到了Java SE 5.0 平台和以后版本,可以使用泛型集合功能指定要存放在集合中的对象类型。避免了获取时做强制类型转换的麻烦。

Map 接口

通用集合实现

列表List

?列表List是一个有顺序的Collection,允许有重复元素,主要实现类包括ArrayList和LinkedList,前者是顺序表,后者是链表。

?程序11-1 的示例中,程序声明了一个被赋予新的ArrayList 对象的List 类型的变量(list)。然后添加一些元素,将list 印到标准输出。因为List 允许有重复元素,程序11-1 的第10 行和第11 行的add 方法返回true。

列表List

1 import java.util.*;

2 public class ArrayListExample {

3 public static void main(String[] args) {

4 List list = new ArrayList();

5 list.add("one");

6 list.add("second");

7 list.add("3rd");

8 list.add(new Integer(4));

9 list.add(new Float(5.0F));

10 list.add("second"); // 重复,被添加

11 list.add(new Integer(4)); // 重复,被添加

12 System.out.println(list);

13 }

14 }

集合Set

?程序11-2 的示例中,程序声明了一个已初始化为new HashSet 的Set 类型的变量(set)。然后添加一些元素,并将set打印到标准输出中。程序11-2的第10 行和第11 行尝试对set添加重复的值。因为重复值无法添加到Set,所以add 方法返回false。

集合Set

1 import java.util.*;

2 public class SetExample {

3 public static void main(String[] args) {

4 Set set = new HashSet();

5 set.add("one");

6 set.add("second");

7 set.add("3rd");

8 set.add(new Integer(4));

9 set.add(new Float(5.0F));

10 set.add("second"); // 重复,不被添加

11 set.add(new Integer(4)); // 重复,不被添加

12 System.out.println(set);

13 }

14 }

映射Map

?Map 有时称之为关联数组。Map 对象描述了键(key) 与值(value) 的映射关系。根据定义,Map对象不允许重复键或空键,一个键最多只能对应一个值。

?Map 接口提供使映射内容被视为集合的三个方法:

entrySet –返回包括所有键值对的集合

keySet –返回映射所有键的集合

values –返回包含映射内所有值的集合

Map

?Map 接口并没有继承Collection 接口,因为它代表了映射,而非对象的集合。SortedMap 接口继承Map 接口。实现Map接口的一些类有HashMap、TreeMap、IdentityHashMap 和WeakHashMap。这些映射集合实现的迭代器所表示的顺序只针对每个特定的迭代器。

映射Map

?程序11-3 的示例中,程序声明了一个Map 类型的变量map,并赋予它新的HashMap对象。然后通过使用put操作添加一些元素。为了证明map 不允许有重复键,程序尝试使用存在的键添加新的值。这将导致以前添加的值被新的值取代。随后程序使用集合查看操作keySet、values 和entrySet 获取map 的内容。

1 import java.util.*;

2 public class MapExample {

3 public static void main(String args[]) {

4 Map map = new HashMap();

5 map.put("one","1st");

6 map.put("second", new Integer(2));

7 map.put("third","3rd");

8 // 重写前面的赋值

9 map.put("third","III");

10 // 返回键的集合

11 Set set1 = map.keySet();

12 // 返回值的集合

13 Collection collection = map.values();

14 // 返回键值映射的集合

15 Set set2 = map.entrySet();

16 System.out.println(set1 + "\n" + collection + ―\n‖ + set2);

17 }

18 }

遗留的集合类

?JDK 1.0和1.1版本的集合类仍然以同样的接口存在于当前的JDK 中,但它们已经被重组以便与新的集合API 交互。

Vector 类实现List 接口。

Stack 类是Vector 的扩展,添加了典型的堆栈操作

Hashtable 类是Map 的实现。

Properties 类是Hashtable 的扩展

?上述的每个集合都有返回枚举对象的elements 方法。Enumeration 同Iterator 接口类似但不兼容。例如hasNext 由枚举接口中的hasMoreElements 替代。

排序集合

?Comparable 和Comparator 接口对于排序集合非常有用。Comparable 接口为实现它的类提供自然排序。Comparator接口用于指定顺序关系。也可以用于覆盖自然排序。这些接口对于集合元素的排序非常有用。

Comparable接口

?Comparable 接口为https://www.doczj.com/doc/214414490.html,ng 包内的成员。当声明类时,JVM 实现无法确定此类对象所需的顺序。通过实现Comparable 接口,可以为任意类的对象提供排序。可以将包含实现Comparable 接口的类的对象排序。实现Comparable 接口的一些Java 类的示例有Byte、Long、String、Date 和Float。其中,number 类使用数字实现;String 类则使用字母实现,Date类使用时间顺序实现。将包含String 类型元素的ArrayList 传递给集合类的静态排序方法,将返回按照字母顺序排序的列表。包含Date 类型元素的列表按时间顺序排序。包含Integer 类型元素的列表按数值大小排序。要编写自定义的Comparable 类型,需要实现Comparable 接口的compareTo 方法。?程序11-4 展示了如何实现Comparable 接口。Student 类实现Comparable 接口以便此类的对象可以互相比较。

运行结果

?StudentList 程序输出结果为:

Name = Kelly Grant ID = 0 GPA = 2.3

Name = John Lynn ID = 0 GPA = 2.8

Name = Jim Max ID = 0 GPA = 3.6

Name = Mike Hauffmamn ID = 0 GPA = 4.0

?由观察得到学生是依照GPA 进行比较的。这是因为当在TreeSet 集合中排序时,TreeSet查看对象是否有自然顺序,并且在这种情况下,使用compareTo 方法比较对象。

Comparator接口

?有些集合,例如TreeSet 是被排序的。TreeSet 实现需要知道如何将元素排序。假如元素已经有自然排序,TreeSet 使用自然排序。否则,必须协助排序。例如,TreeSet 类有将Comparator 接收为参数的以下构造器:

TreeSet(Comparator comparator)

?此构造器会创建一个新的空树集合,依照指定的Comparator 来排序。下面将会进一步讨论Comparator 接口的使用。

《集合框架及泛型》上机实践内容

《集合框架及泛型》作业 一、根据课上讲解内容,完成演示示例和课堂练习 1、ArrayList获取并打印新闻标题 需求说明:按照以下实现的步骤,使用ArrayList获取和打印新闻标题,显示效果如下图所示: (1)创建多个各类新闻标题对象,包含ID、名称和创建者三个属性; (2)创建存储各类新闻标题的集合对象; (3)按照顺序依次添加各类新闻标题,使用add()方法; (4)获取新闻标题的总数,使用size()方法; (5)根据位置获取相应新闻标题、逐条打印每条新闻标题的名称,使用for 循环遍历。 2、ArrayList存储狗狗信息 需求说明:按照以下实现的步骤,使用ArrayList存储狗狗信息,使用ArrayList的方法对狗狗信息进行删除、读取和判断,显示效果如下图所示:(1)存储多条狗信息,获取狗总数,逐条打印出各条狗信息; (2)删除指定位置的狗,使用remove()方法; (3)判断集合中是否包含指定狗,使用contains()方法;

3、LinkedList添加和删除新闻标题 需求说明:在作业1的基础上,换用LinkedList存储新闻数据,并且使用LinkedList的getFirst()和getLast()方法获取第一条和最后一条数据,以及removeFirst()和removeLast()方法删除第一条和最后一条数据,输出效果如下图所示。 4、集合头尾位置删除和条件狗信息 需求说明:按照作业3的实现方式和所用到LinkedList的方法,实现狗狗信

息的更新并输出,输出效果如图所示。 5、使用Iterator和增强型for循环遍历Set 需求说明:按照以下实现的步骤,使用Iterator和增强型for循环遍历Set,输出效果如下图所示: (1)创建多个各类新闻标题对象,包含ID、名称和创建者三个属性; (2)创建存储各类新闻标题的集合对象; (3)按照顺序依次添加各类新闻标题; (4)获取新闻标题的总数; (5)使用iterator()获取Iterator对象; (6)使用Iterator遍历集合,使用hasNext()方法作为循环条件,判断是否存在另一个可访问的元素; (7)使用增强型for遍历集合;

实验十 泛型与集合框架

实验十泛型与集合框架 1.实验目的 1、掌握LinkedList类和Collections类提供的用于排序和查找链表中 的数据的方法 2、掌握用散列映射来存储数据 3、掌握TreeSet类的使用 2.实验内容 1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行 得出结果。 1)实验1 按身高排序 2)实验2 英汉小字典 3)实验3 演出节目单 4)实验4输出args[]中的单词 2、设计编写程序完成以下任务。 1)仿照实验1编写TV类,要求通过实现Comparable接口规定该类的对象的大小关系,按price值得大小确定大小关系,即电视机按其价格确定之间的大小关系。 2)从控制台输入若干个单词(输入回车结束)放入集合中,将这些单词排序后(忽略大小写)打印出来。 知识点:List接口的实现类、String常用方法 3)请使用LinkedList来模拟一个队列(先进先出的特性): (1)拥有放入对象的方法void put(Object o) (2)取出对象的方法Object get() (3)判断队列当中是否为空的方法boolean isEmpty();并且,编写测试代码,验证你的队列是否正确。 知识点:List接口的实现类LinkedList常用方法 4)在一个列表中存储以下元素:apple,grape,banana,pear (1)返回集合中的最大的和最小的元素 (2)将集合进行排序,并将排序后的结果打印在控制台上 知识点:Collections类中的方法 3.实验步骤 略 4.评分标准 1.A——内容功能完善,编程风格好,人机接口界面好; 2.B——内容功能完善,编程风格良好,人机接口界面良好;

JAVA实验报告-集合框架与泛型机制

Java 语言程序设计 C 实验报告 集合框架及泛型机制 学生姓名 专业、班级 指导教师 成绩 计算机与信息工程学院 年月日

一、实验目的 学习课程相关章节知识,通过上机练习,掌握以下知识: 1.掌握 List 接口下 ArrayList 及 LinkedList 的使用方法。 2.掌握 Map 接口下 HashMap 及 HashTable的使用方法 3.掌握集合中泛型的使用 二、实验内容 利用集合完成象数据库那样存储数据,并且可以简单查询,利用 map 存储学生信息,字段如下: id ,name,age,实现步骤: (1)创建类,类图如下: (2)在 main 方法编写逻辑代码 (3)运行程序并测试结果 package https://www.doczj.com/doc/214414490.html,; public class Student { private String name ; private int age ; private String id ;

public String getName() { return name ; } public void setName(String name ) { this . name =name ; } public int getAge() { return age ; } public void setAge(int age ) { this. age=age ; } public String getId() { return id; } public void setId(String id) { this. id=id; } public Student(String name ,int age , String id ) { super(); this. name =name ; this. age=age ; this. id=id; } public void sayHi() { System.out.println("name=" +this.getName()+"age=" + this .getAge()+" " + "id=" + this.getId()); } }

JAVA实验报告-集合框架及泛型机制

Java语言程序设计C 实验报告 集合框架及泛型机制 学生姓名 专业、班级 指导教师 成绩 计算机与信息工程学院 年月日 一、实验目的 学习课程相关章节知识,通过上机练习,掌握以下知识:

1.掌握List接口下ArrayList及LinkedList的使用方法。 2.掌握Map接口下HashMap 及HashTable的使用方法 3.掌握集合中泛型的使用 二、实验内容 利用集合完成象数据库那样存储数据,并且可以简单查询,利用map存储学生信息,字段如下: id ,name,age,实现步骤: (1)创建类,类图如下: (2)在main方法编写逻辑代码 (3)运行程序并测试结果 package com、cn; public class Student { private String name; private int age; private String id; public String getName() { return name; } public void setName(String name) {

this、name = name; } public int getAge() { return age; } public void setAge(int age) { this、age = age; } public String getId() { return id; } public void setId(String id) { this、id = id; } public Student(String name, int age, String id) { super(); this、name = name; this、age = age; this、id = id; } public void sayHi() { System、out、println("name="+this、getName()+"age="+this、getAge()+" "+"id="+this、getId()); } } //Databace类 package com、cn; import java、util、Collection; import java、util、HashMap; import java、util、Iterator; public class Databace { private Student a; public Databace() { super(); map=new HashMap(); } public Student getA() { return a; }

实验6 泛型与集合框架_附答案

任务一:用LinkedList存放对象 1.利用面向对象的思想,创建以下类: ●Person类,包含Person的姓名和身份证号码,覆盖Object类的toString() 方法,显示“姓名:XXX 身份证号:XXX”。 ●Student类,继承Person类,包含学生的语文、数学、英文课的成绩,并覆盖 父类的toString()方法,显示“姓名:XXX 身份证号:XXX 语文:XXX 数学:XXX 英文:XXX”。 ●Teacher类,继承Person类,包含教师的工资。并覆盖父类的toString()方 法,显示“姓名:XXX 身份证号:XXX 工资:XXX”。 ●public class Person implements Comparable{ ●String name; ●String ID; ●Person(String s,String i){ ●name=s; ●ID=i; } ●public String toString() { ●String str="姓名:"+name+" 身份证号码:"+ID; ●return str; } ●public int compareTo(Object arg0) { ●Person p=(Person)arg0; ●return https://www.doczj.com/doc/214414490.html,pareTo(p.ID); } } ●class Student extends Person { ●int Chinese; ●int Math; ●int English; ●Student(String n,String i,int c,int m,int e){ ●super(n,i); ●Chinese=c; ●Math=m; ●English=e; } ●public String toString() { ●String str; ●str=" 语文成绩:"+Chinese+" 数学成绩:"+Math+" 英语成绩: "+English; ●return super.toString()+str; ●} ●} ●class Teacher extends Person{ ●int salary; ●Teacher(String n,String i,int s){ ●super(n,i); ●salary=s; ●}

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

浙江大学城市学院实验报告 课程名称面向对象程序设计 实验项目名称集合框架与泛型 学生姓名专业班级学号 一. 实验目的和要求 1. 了解Java集合框架的接口和实现类 2. 理解泛型类、泛型接口、泛型方法的特点 3. 掌握List接口及其实现类LinkedList、ArrayList 4. 了解Set接口及其实现类HashSet、TreeSet 5. 了解Map及其实现类HashMap、TreeMap 二. 实验内容 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的功能。 4. 编程实现:设计学生管理类StudentManager(用Set集合管理学生对象)。具体功能 要求同第3题,但是需要用Set的实现类(比如HashSet、TreeSet)管理学生对象。

泛型与集合框架

泛型与集合框架 1.实验目的 1、掌握LinkedList类和Collections类提供的用于排序和查找链表中 的数据的方法 2、掌握用散列映射来存储数据 3、掌握TreeSet类的使用 2.实验内容 1、根据附录里的源代码,完成代码填空,使程序能够运行得出结果。 1)实验1 按身高排序 2)实验2 英汉小字典 3)实验3 演出节目单 4)实验4输出args[]中的单词 2、设计编写程序完成以下任务。 1)仿照实验1编写TV类,要求通过实现Comparable接口规定该类的对象的大小关系,按price值得大小确定大小关系,即电视机按其价格确定之间的大小关系。 2)从控制台输入若干个单词(输入回车结束)放入集合中,将这些单词排序后(忽略大小写)打印出来。 知识点:List接口的实现类、String常用方法 3)请使用LinkedList来模拟一个队列(先进先出的特性): (1)拥有放入对象的方法void put(Object o) (2)取出对象的方法Object get() (3)判断队列当中是否为空的方法boolean isEmpty();并且,编写测试代码,验证你的队列是否正确。 知识点:List接口的实现类LinkedList常用方法 4)在一个列表中存储以下元素:apple,grape,banana,pear (1)返回集合中的最大的和最小的元素 (2)将集合进行排序,并将排序后的结果打印在控制台上 知识点:Collections类中的方法 3.实验步骤 略 4.评分标准 1.A——内容功能完善,编程风格好,人机接口界面好; 2.B——内容功能完善,编程风格良好,人机接口界面良好; 3.C——完成必做内容;

java集合框架(习题与答案)资料

java 集合框架(习题) 集合框架 Key Point * Collection 接口、Set 接口、List 接口基本操作 * List 接口及其实现类 * Set 接口及其实现类 * 迭代遍历 * Hash 算法与hashCode 方法 * Comparable 接口 * Map 接口及其实现类 * 遍历Map * 泛型 练习 1. 填空 Collection 接口的特点是元素是对象; List 接口的特点是元素有(有|无)顺序,可以(可以|不可以)重复; Set 接口的特点是元素无(有|无)顺序,不可以(可以|不可以)重复;Map 接口的特点是元素是键值对,其中值可以重复,键不可以重复。 2. (List)有如下代码 import java.util.*; public class TestList{ public static void main(String args[]){ List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(1, “Learn”); list.add(1, “Java”); printList(list); } public static void printList(List list){ for(Object obj:list){ String str=(String)obj; System.out.println(obj); } } } 要求: 1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容 2) 写出程序执行的结果Hello java Learn World 3) 如果要把实现类由ArrayList 换为LinkedList,应该改哪里?ArrayList 和LinkedList 使用上有什么区别?实现上有什么区别?

实验13集合框架与泛型实验报告

实验13 集合框架与泛型 一、实验目的和要求 1. 了解Java集合框架的接口和实现类 2. 理解泛型类、泛型接口、泛型方法的特点 3. 掌握List接口及其实现类LinkedList、ArrayList 4. 了解Set接口及其实现类HashSet、TreeSet 5. 了解Map及其实现类HashMap、TreeMap 二、实验内容 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的功能。 4. 编程实现:设计学生管理类StudentManager(用Set集合管理学生对象)。具体功能 要求同第3题,但是需要用Set的实现类(比如HashSet、TreeSet)管理学生对象。 5. 编程实现:设计学生管理类StudentManager(用Map管理学生对象)。具体功能要求

相关主题
文本预览
相关文档 最新文档