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

合集下载

泛型与集合框架

泛型与集合框架
▪ interface Listen<E> { ▪ void listen(E x); ▪} ▪ 注:普通类实现泛型接口时,必须指定泛型接口
中泛型列表中的具体类型
.
例12-2
▪ interface Listen<E> {

void listen(E x);
▪}
▪ class Student implements Listen<Piano> {
向这个链表依次添加节点。由于任何类都是 Object类的子类,因此可以把任何一个对象作为 链表节点中的对象
.
使用集合框架注意事项(没有使用泛型)
任何对象加入集合类后,自动转变为Object类型;取出 时,需要进行强制类型转换,恢复为特定的类型
Rabbit
Car
Student
加入集合
从集合中取出
Object
例12-3
▪ List<String> list=new LinkedList<String>();
▪ list.add("大家好");
▪ list.add("国庆60周年");
▪ list.add("十一快乐");
▪ Iterator<String> iter=list.iterator();
▪ while(iter.hasNext()){
.
12.2.3 遍历链表
▪ 当用户需要遍历集合中的对象时,应当使用该集 合提供的迭代器,而不是让集合本身来遍历其中 的对象。由于迭代器遍历集合的方法在找到集合 中的一个对象的同时,也得到待遍历的后继对象 的引用,因此迭代器可以快速地遍历集合。

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集合框架(习题与答案)

java 集合框架(习题)集合框架Key Point‎* Colle‎ction‎接口、Set 接口、List 接口基本操‎作* List 接口及其实‎现类* Set 接口及其实‎现类* 迭代遍历* Hash 算法与ha‎shCod‎e方法* Compa‎rable‎接口* Map 接口及其实‎现类* 遍历Map‎* 泛型练习1. 填空Colle‎ction‎接口的特点‎是元素是对‎象;List 接口的特点‎是元素有(有|无)顺序,可以(可以|不可以)重复;Set 接口的特点‎是元素无(有|无)顺序,不可以(可以|不可以)重复;Map 接口的特点‎是元素是键‎值对,其中值可以‎重复,键不可以重‎复。

2. (List)有如下代码‎impor‎t java.util.*;publi‎c class‎TestL‎i st{publi‎c stati‎c void main(Strin‎g args[]){List list = new Array‎L ist();list.add(“Hello‎”);list.add(“World‎”);list.add(1, “Learn‎”);list.add(1,‎“Java”);print‎L ist(list);}publi‎c stati‎c void print‎L ist(List list){for(Objec‎t obj:list){Strin‎g str=(Strin‎g)obj;Syste‎m.out.print‎l n(obj);}}}要求:1) 把//1 处的代码补‎充完整,要求输出l‎i s t 中所有元素‎的内容2) 写出程序执‎行的结果Hello‎j ava Learn‎W orld‎3) 如果要把实‎现类由Ar‎rayLi‎s t换为Lin‎k edLi‎s t,应该改哪里‎?A rray‎Li st 和Linke‎d List‎使用上有什‎么区别?实现上有什‎么区别?把实例化的‎语句改为n‎e w Linke‎dLi st‎();Array‎Li st 数组实现查询快增删慢Linke‎d List‎链表实现查询慢增删快4) 如果要把实‎现类由Ar‎rayLi‎s t换为V ec‎t or,应该改哪里‎?A rray‎Li st 和V ect‎o r 使用上有什么‎区别?实现上有什‎么区别?Array‎Li st是‎线程不同步‎的,轻量级的,线程不安全‎,速度快V ecto‎r是线程同‎步的,多线程访问‎比较安全,速度慢3. (List)写出下面程‎序的运行结‎果impor‎t java.util.*;publi‎c class‎TestL‎i st{publi‎c stati‎c void main(Strin‎g args[]){List list = new Array‎L ist();list.add(“Hello‎”);list.add(“World‎”);list.add(“Hello‎”);list.add(“Learn‎”);list.remov‎e(“Hello‎”);list.remov‎e(0);for(int i = 0; i<list.size(); i++){Syste‎m.out.print‎l n(list.get(i));}}}Hello‎Learn‎4. (Set,List)impor‎t java.util.*;publi‎c class‎TestL‎i stSe‎t{publi‎c stati‎c void main(Strin‎g args[]){List list = new Array‎L ist();list.add(“Hello‎”);list.add(“Learn‎”);list.add(“Hello‎”);list.add(“Welco‎m e”);Set set = new HashS‎e t();set.addAl‎l(list);Syste‎m.out.print‎l n(set.size());}}选择正确答‎案A.编译不通过‎B.编译通过,运行时异常‎C.编译运行都‎正常,//输出Has‎h Set中‎不能放重复‎值D.编译运行都‎正常,输出45. (List)已知有一个‎W o rke‎r类如下:publi‎c class‎Worke‎r {priva‎t e int age;priva‎t e Strin‎g name;priva‎t e doubl‎e salar‎y;publi‎c Worke‎r (){}publi‎c Worke‎r (Strin‎g name, int age, doubl‎e salar‎y){ = name;this.age = age;this.salar‎y = salar‎y;}publi‎c int getAg‎e() {retur‎n age;}publi‎c void setAg‎e(int age) {this.age = age;}publi‎c Strin‎g getNa‎m e() {retur‎n name;}publi‎c void setNa‎m e(Strin‎g name) { = name;}publi‎c doubl‎e getSa‎l ary(){retur‎n salar‎y;}publi‎c void setSa‎l ary(doubl‎e salar‎y){this.salar‎y = salar‎y;}publi‎c void work(){Syste‎m.out.print‎l n(name‎+‎“‎work”);}}完成下面的‎要求1) 创建一个L‎i s t,在List‎中增加三个‎工人,基本信息如‎下:姓名年龄工资zhang‎3 18 3000li4 25 3500wang5‎22 32002) 在li4 之前插入一‎个工人,信息为:姓名:zhao6‎,年龄:24,工资330‎03) 删除wan‎g5 的信息4) 利用for‎循环遍历,打印Lis‎t中所有工人‎的信息5) 利用迭代遍‎历,对List‎中所有的工‎人调用wo‎rk 方法。

第2章 集合框架和泛型(下)

第2章 集合框架和泛型(下)
} } }
演示示例:使用泛型集合
泛型集合3-3
public class Test7 { public static void main(String[] args) { 标记键-值类型
标记键-值类型
//1、使用HashMap存储多组国家英文简称和中文全称的键值对 Map <String,String> countries=new HashMap<String,String>(); countries.put("CN", "中华人民共和国"); countries.put("RU", "俄罗斯联邦"); countries.put("FR", "法兰西共和国"); //2、显示"CN"对应国家的中文全称 String country= countries.get("CN"); System.out.println("CN对应的国家是:"+country);
第2章 集合框架和泛型(下)
理论部分
回顾与作业点评
简述集合框架的分支构成 集合带来了什么好处
预习检查
泛型带来的好处是什么?
本章任务
使用泛型集合保存和输出宠物信息
本章目标
掌握泛型集合的使用
泛型集合3-2
1. 为什么要使用泛型 2. 泛型集合对应哪些泛型框架 3. 泛型的遍历 4. 泛型在工作中的应用(参数传递,类型返回)
}
} 无需类型强制转换 (String) countries.get("CN"); 演示示例:使用泛型集合
总结
• 为什么要引入泛型集合?

6Java第六单元练习题泛型与集合

6Java第六单元练习题泛型与集合

6泛型与集合6.1单项选择题1.可实现有序对象的操作就是?( )A.HashMapB.HashSetC.TreeMapD.Stack2.不就是迭代器接口(Iterator)所定义的方法就是( )。

A.hasNext()B.next()C.remove()D.nextElement()3.下面说法不正确的就是( )A.列表(List)、集合(Set)与映射(Map)都就是java、util包中的接口。

B.List接口就是可以包含重复元素的有序集合。

C.Set接口就是不包含重复元素的集合。

D.Map接口将键映射到值,键可以重复,但每个键最多只能映射一个值。

4.下面那些方法不就是接口Collection中已声明的方法( )A.添加元素的add(Object obj) 方法B.删除元素的remove(Object obj)方法C.得到元素个数的length()方法D.返回迭代器的iterator()方法,迭代器用于元素遍历5、下列关于容器的描述中,错误的就是( )A.容器就是由若干个组建与容器组成的B.容器就是对图形界面中界面元素的一种管理C.容器就是一种对指定宽与高的矩形范围D.容器都就是可以独立的窗口6、下列界面元素中,不就是容器的就是( )A、ListB、JFrameC、JDialogD、Panel7、应用程序的main方法中有以下语句,则输出的结果就是( )。

Hashtable hashtable=new Hashtable();hashtable、put("100","aaa");hashtable、put("200","bbb");hashtable、put("300","ccc");System、out、println(hashtable、get("300")、toString()+ hashtable、get("200")、toString()+ hashtable、get("100")、toString());A) aaa B) bbb C) ccc D) cccbbbaaa6.2判断题1.Map接口就是自Collection接口继承而来。

java的泛型与java的集合编程题

java的泛型与java的集合编程题

题目:深度探讨Java的泛型与集合编程题一、引言Java作为一种广泛使用的编程语言,其泛型与集合是非常重要的特性。

在编写Java程序时,对泛型与集合的理解和应用至关重要。

本文将深入探讨Java的泛型与集合编程题,帮助读者更深入地理解这一主题。

二、泛型的基本概念和用法1. 什么是泛型?泛型是Java语言中一种重要的特性,它允许我们在编写代码时使用参数化类型,从而提高代码的重用性和安全性。

通过泛型,我们可以在编译时检查类型安全,避免在运行时出现类型转换错误。

2. 泛型的基本用法在Java中,我们可以使用泛型来定义类、接口和方法。

定义一个泛型类可以使用以下语法:```javapublic class Box<T> {private T value;public void setValue(T value) {this.value = value;}public T getValue() {return value;}}```在上面的代码中,Box<T>就是一个泛型类,其中的T表示类型参数。

通过使用泛型,我们可以创建具有不同数据类型的Box对象,从而实现通用性和灵活性。

三、集合框架的基本概念和用法1. 什么是集合框架?集合框架是Java中用来存储和操作数据的一组接口和类。

它提供了一系列的数据结构(如List、Set、Map等)和算法。

在Java中,集合框架是非常常用的,我们几乎可以在所有的Java程序中看到它的身影。

2. 集合框架的基本用法我们可以使用集合框架来存储和操作数据。

可以使用List接口来存储一组有序的数据,使用Set接口来存储一组不重复的数据,使用Map接口来存储键值对等。

通过对集合框架的灵活运用,我们能够更加高效地处理数据。

四、深入理解泛型与集合的编程题1. 编程题1:使用泛型实现一个通用的栈要求:实现一个通用的栈类,能够存储任意类型的数据,并实现入栈、出栈等操作。

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

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

浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称集合框架与泛型学生姓名专业班级学号一. 实验目的和要求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();//不需要强制转换}}我们可以看出自定义泛型的可扩展性高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

任务一:用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 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;●}●public String toString() {●String str=" 工资"+salary;●return super.toString()+str;●} }2.分别为以上三个类创建对象:3.将这三个对象存放在一个LinkedList对象中:LinkedList<Person> list=new LinkedList<Person>();4.运行示例:public class MyList {public static void main(String[] args) {LinkedList<Person> m=new LinkedList<Person>();Person p=new Person("张三","12310000");Student s=new Student("李四","12320000",89,93,94);Teacher t=new Teacher("王五","12330000",3000);m.add(p);m.add(s);m.add(t);Iterator<Person> i = m.iterator();while(i.hasNext()){System.out.println(i.next());}}}5.练习使用LinkedList的其他方法。

将自己的信息添加到链表的开头,以及结尾,然后再删除自己的信息。

返回类型方法名称描述void addFirst()将指定元素插入此列表的开头void addLast()将指定元素添加到此列表的结尾E removeFirst()移除并返回此列表的第一个元素E removeLast()移除并返回此列表的最后一个元素boolean add(Object o)将指定的元素添加到列表中任务二:用SET存放对象1.将以下三个Person类的对象放在一个HashSet中,由于HashSet不能存放重复的元素(姓名和身份证号都不能重复),所以在Person类中,需要覆盖hashCode()方法和equals()方法。

这里给出重写方法的程序:public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (name == null) {if ( != null)return false;} else if (!name.equals())return false;if (id != other.id)return false;return true;}public int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 :name.hashCode());result = prime * result + id;return result;}再创建一个Person对象:能放入到刚才创建的HashSet中吗?通过这个对象来测试hashCode()方法和equals()方法的编写是否正确。

1.把集合中的元素打印出来(使用迭代器Iterator类)。

2.public class MyHashSet {3. public static void main(String[] args) {4.HashSet<Person> h=new HashSet<Person>();5.Person p=new Person("张三","12310000");6.Person p4=new Person("张三","12310000");7.h.add(p);8.Person p1=new Person("李四","12320000");9.Person p2=new Person("王五","12330000");10.h.add(p1);11.h.add(p2);12.Iterator<Person> i = h.iterator();13.while(i.hasNext()){14.System.out.println(i.next());15.}16.//添加之后17.h.add(p4);18.System.out.println("添加之后");19.Iterator<Person> i1 = h.iterator();20.while(i1.hasNext()){21.System.out.println(i1.next());22.} }}23.用TreeSet存放上面三个人,要求按照身份证号排序,打印出来。

(注意使用TreeSet要实现Comparable接口,并覆盖compareTo()方法)24.import java.util.Iterator;25.import java.util.TreeSet;26.27.public class MYTreeSet {28. public static void main(String[] args) {29.TreeSet<Person> t=new TreeSet<Person>();30.Person p=new Person("张三","12310000");31.Person p1=new Person("李四","12320000");32.Person p2=new Person("王五","12330000");33.Person p4=new Person("王五","12330000");34.t.add(p);35.t.add(p1);36.t.add(p2);37.Iterator<Person> i=t.iterator();38.while(i.hasNext()){39.System.out.println(i.next());40.}41.System.out.println("添加之后:");42.t.add(p4);43.Iterator<Person> i1=t.iterator();44.while(i1.hasNext()){45.System.out.println(i1.next());46.} }}任务三:用Map存放对象设计一个TXT文件,里面存放了10个同学的学号和姓名。

给定学生的学号,问该学生在不在名单中,如果在,给出姓名。

[基本要求] 使用Java API中的Map相关的技术来完成实验任务。

●使用文件操作,读出文件中的学号和姓名;●学号作为KEY,姓名作为VALUE,放到MAP中;●从命令行中输入的学号,作为KEY,在MAP中进行检索。

public class MYMap {public static void main(String[] args) throws IOException {System.out.println("请输入文件的绝对路径");Scanner re=new Scanner(System.in);String wen=re.nextLine();BufferedReader bu=new BufferedReader(new FileReader(wen));HashMap<String, String> m=new HashMap<String,String>();String str;while((str=bu.readLine())!=null){String[]s=str.split(" ");m.put(s[0], s[1]);}String sr;System.out.println("请输入您要查询的学号:");String num=re.nextLine();System.out.println(num);if((sr=m.get(num))!=null){System.out.println(num +" "+sr);}elseSystem.out.println("没有此人");bu.close();}}。

相关文档
最新文档