Java集合框架实验报告.docx

上传人:b****6 文档编号:15843175 上传时间:2023-07-08 格式:DOCX 页数:15 大小:19.67KB
下载 相关 举报
Java集合框架实验报告.docx_第1页
第1页 / 共15页
Java集合框架实验报告.docx_第2页
第2页 / 共15页
Java集合框架实验报告.docx_第3页
第3页 / 共15页
Java集合框架实验报告.docx_第4页
第4页 / 共15页
Java集合框架实验报告.docx_第5页
第5页 / 共15页
Java集合框架实验报告.docx_第6页
第6页 / 共15页
Java集合框架实验报告.docx_第7页
第7页 / 共15页
Java集合框架实验报告.docx_第8页
第8页 / 共15页
Java集合框架实验报告.docx_第9页
第9页 / 共15页
Java集合框架实验报告.docx_第10页
第10页 / 共15页
Java集合框架实验报告.docx_第11页
第11页 / 共15页
Java集合框架实验报告.docx_第12页
第12页 / 共15页
Java集合框架实验报告.docx_第13页
第13页 / 共15页
Java集合框架实验报告.docx_第14页
第14页 / 共15页
Java集合框架实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Java集合框架实验报告.docx

《Java集合框架实验报告.docx》由会员分享,可在线阅读,更多相关《Java集合框架实验报告.docx(15页珍藏版)》请在冰点文库上搜索。

Java集合框架实验报告.docx

Java集合框架实验报告

浙江大学城市学院实验报告

课程名称Java高级程序设计

实验项目名称Java集合框架实验

学生姓名专业班级学号

一、实验目的

1.理解Java集合框架的特点、接口与类之间的关系

2.掌握Java集合框架的List接口,以及List接口的重要实现类LinkedList、ArrayList

3.掌握Java集合框架的Set、SortedSet接口,以及重要实现类HashSet与TreeSet

4.掌握Java集合框架的Map、SortedMap接口及其重要实现类HashMap、TreeMap

5.掌握Java集合框架的Collection与Iterator接口的特点与使用方式

二、实验内容

1、使用List管理对象集合

2、使用Map管理对象集合

3、使用Set管理对象集合

4、设计一个自定义的集合类

三、实验步骤

1、在Eclipse中新建工程(即项目)

2、使用List管理对象集合

1)新建一个包listExample

2)在这个包中新建三个类:

Student类,StudentList类,StudentListTest类。

参考代码:

Student.java,StudentList.java,StudentListTest.java

3)完善上面三个类,相关要求参考源代码程序的注释,即根据要求修改源代码程序,给出具体的实现代码(不使用泛型类)。

voidaddStudent(Studentstudent){//添加一个学生对象

booleana=true;

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getId().equalsIgnoreCase(student.getId()))

a=false;

}

if(a==true)

students.add(student);//修改代码,保证students集合中所有学生对象的id号唯一

}

voiddeleteStudentById(Stringid){//根据学号删除学生对象

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getId().equalsIgnoreCase(id))

students.remove(stud);

}

}

voiddeleteStudentByName(Stringname){//根据姓名删除学生对象

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getName().equalsIgnoreCase(name))

students.remove(stud);

}

}

voiddeleteStudentByAge(intage){//根据年龄删除学生对象

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getAge()==age)

students.remove(stud);

}

}

Student[]findByName(Stringname){

inta=0;

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getName().equalsIgnoreCase(name))

a++;

}

Student[]st=newStudent[a];

intb=0;

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getName().equalsIgnoreCase(name)){

st[b]=stud;

b++;

}

}

returnst;

}

Student[]findByAge(intage){

inta=0;

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getAge()==age)

a++;

}

Student[]st=newStudent[a];

intb=0;

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getAge()==age)

{st[b]=stud;b++;}

}

returnst;

}

4)新创建listExample2包,重新设计设计上述程序(新程序都属于这个包),这时需要使用泛型类,即出现的List、ArrayList或LinkedList都使用泛型。

privateListstudents=newArrayList();

voiddeleteStudentById(Stringid){//根据学号删除学生对象

Iteratoriterator=students.iterator();

while(iterator.hasNext())

{

Studentst=(Student)iterator.next();

if(st.getId()==id)iterator.remove();

}

}

voiddeleteStudentByName(Stringname){//根据姓名删除学生对象

Iteratoriterator=students.iterator();

while(iterator.hasNext())

{

Studentst=(Student)iterator.next();

if(st.getName()==name)iterator.remove();

}

}

voiddeleteStudentByAge(intage){//根据年龄删除学生对象

Iteratoriterator=students.iterator();

while(iterator.hasNext())

{

Studentst=(Student)iterator.next();

if(st.getAge()==age)iterator.remove();

}

}

ListfindByName(Stringname){

Liststuds=newArrayList();

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getName().equals(name)){

studs.add(stud);

}

}

returnstuds;

}

ListfindByAge(intage){

Liststuds=newArrayList();

for(inti=0;i

Studentstud=(Student)students.get(i);

if(stud.getAge()==age)

studs.add(stud);

}

returnstuds;

}

3、使用Map管理对象集合

1)新建一个包MapExample

2)在这个包中新建三个类:

Student类,StudentMap类,StudentMapTest类。

参考代码Student.java,StudentMap.java,StudentMapTest.java

3)完善上面三个类,相关要求参考源代码程序的注释,即根据要求修改源代码程序,给出具体的实现代码(不使用泛型类)。

voiddeleteStudentByName(Stringname){//根据学生姓名删除学生对象

Collectionvalues=students.values();

Iteratorit=values.iterator();

while(it.hasNext()){

if(it.next().getName().equals(name))

it.remove();

}

}

voiddeleteStudentByAge(intage){//根据学生年龄删除学生对象

Collectionvalues=students.values();

Iteratorit=values.iterator();

while(it.hasNext()){

if(it.next().getAge()==age)

it.remove();

}

}

Student[]findByName(Stringname){

inta=0;

Collectionvalues=students.values();

Iteratorit=values.iterator();

while(it.hasNext()){

if(it.next().getName().equals(name))

a++;

}

intb=0;

Student[]s=newStudent[a];

Collectionvalues1=students.values();

Iteratorit1=values1.iterator();

while(it1.hasNext()){

Studentss=it1.next();

if(ss.getName().equals(name))

{s[b]=ss;

b++;

}

}

returns;

}

Student[]findByAge(intage){

inta=0;

Collectionvalues=students.values();

Iteratorit=values.iterator();

while(it.hasNext()){

if(it.next().getAge()==age)

a++;

}

intb=0;

Student[]s=newStudent[a];

Collectionvalues1=students.values();

Iteratorit1=values1.iterator();

while(it1.hasNext()){

Studentss=it1.next();

if(ss.getAge()==age)

{s[b]=ss;

b++;

}

}

returns;

}

4)新创建MapExample2包,重新设计设计上述程序(新程序都属于这个包),这时需要使用泛型类,即出现的Map、TreeMap或HashMap都使用泛型。

privateMapstudents=newHashMap();

voidaddStudent(Studentstudent){//添加一个学生对象

students.put(newInteger(student.getId()),student);

}

StudentfindById(Stringid){

returnstudents.get(newInteger(id));

}

4、使用Set管理对象集合

1)新建一个包SetExample

2)在这个包中新建三个类:

Student类,StudentSet类,StudentSetTest类。

参考代码:

这三个类的参考代码见Student.java,StudentSet.java,StudentSetTest.java

3)完善上面三个类,相关要求参考源代码程序的注释,即根据要求修改源代码程序,给出具体的实现代码(不使用泛型类)。

voiddeleteStudentById(Stringid){//根据学号删除学生对象

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getId().equalsIgnoreCase(id))

students.remove(stud);

}

}

voiddeleteStudentByName(Stringname){//根据姓名删除学生对象

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getName().equalsIgnoreCase(name))

students.remove(stud);

}

}

voiddeleteStudentByAge(intage){//根据年龄删除学生对象

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getAge()==age)

students.remove(stud);

}

}

Student[]findByName(Stringname){

inta=0;

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getName().equalsIgnoreCase(name))

a++;

}

Student[]st=newStudent[a];

intb=0;

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getName().equalsIgnoreCase(name))

{

st[b]=stud;

b++;}

}

returnst;

}

Student[]findByAge(intage){

inta=0;

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getAge()==age)

a++;

}

Student[]st=newStudent[a];

intb=0;

for(inti=0;i

Studentstud=(Student)students.toArray()[i];

if(stud.getAge()==age)

{st[b]=stud;

b++;}

}

returnst;

}

4)新创建SetExample2包,重新设计设计上述程序(新程序都属于这个包),这时需要使用泛型类,即出现的Set、TreeSet或HashSet都使用泛型。

注意:

Student类实现Comparable接口的作用。

voiddeleteStudentById(Stringid){//根据学号删除学生对象

Iteratorit=students.iterator();

while(it.hasNext()){

if(it.next().getId().equalsIgnoreCase(id))

it.remove();

}

}

voiddeleteStudentByName(Stringname){//根据姓名删除学生对象

Iteratorit=students.iterator();

while(it.hasNext()){

if(it.next().getName().equalsIgnoreCase(name))

it.remove();

}

}

voiddeleteStudentByAge(intage){//根据年龄删除学生对象

Iteratorit=students.iterator();

while(it.hasNext()){

if(it.next().getAge()==age)

it.remove();

}

publicclassStudentimplementsComparable//实现Comparable接口对于TreeSet排序有用

{

publicintcompareTo(Objectarg0){

Studentstud=(Student)arg0;

returnthis.getId().compareTo(stud.getId());

}

实现是自定义排序功能

5、设计一个自定义的集合类

四.实验结果与分析

1.请说明采用接口变量操作集合对象的方式,并阐述这么做的主要优点。

提示:

在“使用List管理对象集合”的实验中,LinkedList、ArrayList两个类都可以管理一批对象,但是程序中使用List接口变量引用LinkedList、ArrayList对象,即使用如下方式:

privateListstudents=newArrayList();

而不是直接使用LinkedList、ArrayList类型变量,比如:

privateArrayListstudents=newArrayList();

这样做有什么用意,有什么好处?

这是一种很好的设计模式.一个接口有多种实现,这种写法是java面向对象的一种思想,依赖倒置原则,即依赖于抽象不依赖于实现(具体)。

给调用者提供的应该是接口或者抽象类,而实现者可以实现或者继承接口或者抽象类来满足调用者,这样调用者不必知道实现者怎样操作,实现者也可以根据具体情况去实现,这样去除了耦合。

这就是java设计模式的基础思想之一。

从Java语法上,这种方式是使用接口引用指向具体实现,这样大大提高了代码使用的灵活性。

2.请说明LinkedList、ArrayList有何不同,各自适用于哪些场合?

LinkedList:

采用链表来管理集合的元素。

优点是可以方便地进行元素的增加,删除。

即元素个数变化的代价较小,但是查询性能比数组差。

ArrayList:

使用可变长度的数组来管理集合的元素。

优点是查询性能比链表好,缺点是长度不可变化,删除元素代价大。

LinkedList适用于元素增加删除频繁的场合。

ArrayList适用于查询元素较频繁的场合

3.请说明HashSet,TreeSet有何不同,各自适用于哪些场合?

1、TreeSet中的数据是自动排好序的,不允许放入null值

2、HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。

但是同一个类的对象可以放入不同的实例

4.请说明HashMap、TreeMap有何不同,各自适用于哪些场合?

HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

5.Iterator与For循环都可以用于遍历集合中的元素,请问有何不同之处。

Iterator:

通用,对于所有集合,使用Iterator性能都一样,客户端自身不维护遍历集合的"指针",所有的内部状态(如当前元素位置,是否有下一个元素)都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。

客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,就可以间接遍历整个集合。

For循环:

虽然和Iterator性能差不多,但是在查找链表如LinkedList的时候遍历集合的开销会差别很大!

就以LinkedList来说,用get(i)方法来取元素的主要代码,我们可以看到,LinkedList内的get(i)方法,用了循环方式来返回元素,性能肯定会差.

6.简单地分析比较不同集合类在选用上的主要原则。

List接口可以存储重复的数据。

并且可以基于位置(下标)操作集合。

当增删改频繁的时候用LinkedList。

当查询频繁时用ArrayList

Map接口类似数学中的映射。

对象的管理是一组键-值得映射关系。

主要是适用于数量较多的对象管理。

希望通过KEY快速的查到对应的value。

HashMap是通过哈希表管理的,允许null

TreeMap该

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2