《2022年Java集合框架实验报告.pdf》由会员分享,可在线阅读,更多相关《2022年Java集合框架实验报告.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、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 与
2、 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)完善上面三个类,相关要求参考源代码程序的注释,即根据要
3、求修改源代码程序,给出具体的实现代码(不使用泛型类)。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告void addStudent(Student student) / 添加一个学生对象booleana=true; for( inti =0; i students、size();i +) Student stud = (Student)students、get(i ); if( stud、getId()、equals
4、IgnoreCase(student、getId() a=false; if( a=true) students、add( student); / 修改代码 , 保证 students集合中所有学生对象的 id 号唯一 void deleteStudentById(String id ) / 根据学号删除学生对象for( inti =0; i students、size();i +) Student stud = (Student)students、get(i ); if( stud、getId()、equalsIgnoreCase(id ) students、remove(stud); vo
5、id deleteStudentByName(String name ) /根据姓名删除学生对象for( inti =0; i students、size();i +) Student stud = (Student)students、get(i ); if( stud、getName()、equalsIgnoreCase(name ) students、remove(stud); void deleteStudentByAge(intage ) / 根据年龄删除学生对象for( inti =0; i students、size();i +) Student stud = (Student)s
6、tudents、get(i ); if( stud、getAge()=age ) students、remove(stud); Student findByName(String name) inta=0; for( inti =0; i students、size();i +) Student stud = (Student)students、get(i ); if( stud、getName()、equalsIgnoreCase(name ) a+; Student st =new Studenta; intb=0; for( inti =0; i students、size();i +)
7、 Student stud = (Student)students、get(i ); if( stud、getName()、equalsIgnoreCase(name ) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告st b= stud ; b+; returnst ; Student findByAge(intage ) inta=0; for( inti =0; i students、size();i +) S
8、tudent stud = (Student)students、get(i ); if( stud、getAge()=age ) a+; Student st =new Studenta; intb=0; for( inti =0; i students、size();i +) Student stud = (Student)students、get(i ); if( stud、getAge()=age ) st b= stud; b+; returnst ; 4)新创建listExample2 包,重新设计设计上述程序(新程序都属于这个包),这时需要使用泛型类 ,即出现的 List、Arra
9、yList 或 LinkedList 都使用泛型。private List students = new ArrayList(); void deleteStudentById(String id ) / 根据学号删除学生对象Iterator iterator = students、iterator(); while( iterator、hasNext() Student st =(Student)iterator、 next(); if( st 、getId()=id ) iterator、remove(); void deleteStudentByName(String name ) /根
10、据姓名删除学生对象Iterator iterator = students、iterator(); while( iterator、hasNext() Student st =(Student)iterator、 next(); if( st 、getName()=name ) iterator、remove(); void deleteStudentByAge(intage ) / 根据年龄删除学生对象Iterator iterator = students、iterator(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - -
11、 - - - - - -第 3 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告while( iterator、hasNext() Student st =(Student)iterator、 next(); if( st 、getAge()=age ) iterator、remove(); List findByName(String name ) List studs=new ArrayList(); for( inti =0; i students、size();i +) Student stud = (Student)students、get(i )
12、; if( stud、getName()、equals(name ) studs、add( stud ); returnstuds; List findByAge(intage ) List studs=new ArrayList(); for( inti =0; i students、size();i +) Student stud = (Student)students、get(i ); if( stud、getAge()=age ) studs、add( stud ); returnstuds; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归
13、纳 - - - - - - - - - -第 4 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告3、 使用 Map 管理对象集合1)新建一个包MapExample 2)在这个包中新建三个类:Student 类,StudentMap 类,StudentMapTest 类。参考代码 Student、java, StudentMap、java,StudentMapTest、java 3)完善上面三个类,相关要求参考源代码程序的注释,即根据要求修改源代码程序,给出具体的实现代码(不使用泛型类)。void deleteStudentByName(String nam
14、e ) /根据学生姓名删除学生对象Collection values=students、values(); Iterator it=values、iterator(); while( it、hasNext() if( it、next()、getName()、equals(name) it、remove(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告 void deleteStudentByAge(intage
15、) / 根据学生年龄删除学生对象Collection values=students、values(); Iterator it=values、iterator(); while( it、hasNext() if( it、next()、getAge()=age ) it、remove(); Student findByName(String name) inta=0; Collection values=students、values(); Iterator it=values、iterator(); while( it、hasNext() if( it、next()、getName()、eq
16、uals(name) a+; intb=0; Student s=new Studenta; Collection values1=students、values(); Iterator it1=values1、iterator(); while( it1、hasNext() Student ss =it1、next(); if( ss 、getName()、equals(name ) s b= ss ; b+; returns; Student findByAge(intage ) inta=0; Collection values=students、values(); Iterator i
17、t=values、iterator(); while( it、hasNext() if( it、next()、getAge()=age ) a+; intb=0; Student s=new Studenta; Collection values1=students、values(); Iterator it1=values1、iterator(); while( it1、hasNext() Student ss =it1、next(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 14
18、页 - - - - - - - - - - Java 集合框架实验报告if( ss 、getAge()=age ) s b= ss ; b+; returns; 4)新创建 MapExample2 包,重新设计设计上述程序(新程序都属于这个包),这时需要使用泛型类 ,即出现的 Map、TreeMap 或 HashMap 都使用泛型。privateMap students= newHashMap(); void addStudent(Student student) /添加一个学生对象students、put(new Integer(student、getId(),student); Stude
19、nt findById(String id ) returnstudents、get(new Integer(id ); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告4、 使用 Set 管理对象集合1)新建一个包SetExample 2)在这个包中新建三个类:Student 类,StudentSet类,StudentSetTest类。参考代码 :这三个类的参考代码见Student、 java, StudentSet
20、、 java,StudentSetTest、java 3)完善上面三个类,相关要求参考源代码程序的注释,即根据要求修改源代码程序,给出具体的实现代码(不使用泛型类)。void deleteStudentById(String id ) / 根据学号删除学生对象for( inti =0; i students、size();i +) Student stud = (Student)students、toArray()i ; if( stud、getId()、equalsIgnoreCase(id ) students、remove(stud); 精品资料 - - - 欢迎下载 - - - - -
21、 - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告 void deleteStudentByName(String name ) /根据姓名删除学生对象for( inti =0; i students、size();i +) Student stud = (Student)students、toArray()i ; if( stud、getName()、equalsIgnoreCase(name ) students、remove(stud); void deleteS
22、tudentByAge(intage ) / 根据年龄删除学生对象for( inti =0; i students、size();i +) Student stud = (Student)students、toArray()i ; if( stud、getAge()=age ) students、remove(stud); Student findByName(String name) inta=0; for( inti =0; i students、size();i +) Student stud = (Student)students、toArray()i ; if( stud、getNa
23、me()、equalsIgnoreCase(name ) a+; Student st =new Studenta; intb=0; for( inti =0; i students、size();i +) Student stud = (Student)students、toArray()i ; if( stud、getName()、equalsIgnoreCase(name ) st b= stud ; b+; returnst ; Student findByAge(intage ) inta=0; for( inti =0; i students、size();i +) Student
24、 stud = (Student)students、toArray()i ; if( stud、getAge()=age ) a+; Student st =new Studenta; intb=0; for( inti =0; i students、size();i +) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告Student stud = (Student)students、toArray()i ; if(
25、 stud、getAge()=age ) st b= stud; b+; returnst ; 4)新创建SetExample2 包,重新设计设计上述程序(新程序都属于这个包),这时需要使用泛型类 ,即出现的 Set、TreeSet 或 HashSet 都使用泛型。注意 :Student 类实现 Comparable 接口的作用。void deleteStudentById(String id ) / 根据学号删除学生对象Iteratorit=students、iterator(); while( it、hasNext() if( it、next()、getId()、equalsIgnoreC
26、ase(id ) it、remove(); void deleteStudentByName(String name) / 根据姓名删除学生对象Iteratorit=students、iterator(); while( it、hasNext() if( it、next()、getName()、equalsIgnoreCase(name ) it、remove(); void deleteStudentByAge(intage ) /根据年龄删除学生对象Iteratorit=students、iterator(); while( it、hasNext() if( it、next()、getAg
27、e()=age ) it、remove(); publicclass Student implements Comparable /实现 Comparable接口对于TreeSet排序有用 publicint compareTo(Object arg0 ) Student stud = (Student)arg0 ; returnthis、getId()、compareTo(stud、getId(); 实现就是自定义排序功能精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 14 页 - - -
28、 - - - - - - - Java 集合框架实验报告精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告5、 设计一个自定义的集合类四、实验结果与分析1、 请说明采用接口变量操作集合对象的方式,并阐述这么做的主要优点。提示 :在“使用 List 管理对象集合”的实验中,LinkedList 、ArrayList 两个类都可以管理一批对象 ,但就是程序中使用List 接口变量引用LinkedList 、 ArrayLi
29、st 对象 ,即使用如下方式: private List students = new ArrayList(); 而不就是直接使用LinkedList 、ArrayList 类型变量 ,比如 : private ArrayList students = new ArrayList(); 这样做有什么用意,有什么好处?这就是一种很好的设计模式、一个接口有多种实现,这种写法就是java 面向对象的一种思想 ,依赖倒置原则 ,即依赖于抽象不依赖于实现(具体 )。给调用者提供的应该就是接口或者抽象类,而实现者可以实现或者继承接口或者抽精品资料 - - - 欢迎下载 - - - - - - - - -
30、- - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告象类来满足调用者,这样调用者不必知道实现者怎样操作,实现者也可以根据具体情况去实现 ,这样去除了耦合。这就就是java 设计模式的基础思想之一。从 Java语法上 ,这种方式就是使用接口引用指向具体实现,这样大大提高了代码使用的灵活性。2、请说明LinkedList 、ArrayList 有何不同 ,各自适用于哪些场合?LinkedList: 采用链表来管理集合的元素。优点就是可以方便地进行元素的增加,删除。 即元素个数变化的代价较小,
31、但就是查询性能比数组差。ArrayList: 使用可变长度的数组来管理集合的元素。优点就是查询性能比链表好,缺点就是长度不可变化,删除元素代价大。LinkedList 适用于元素增加删除频繁的场合。ArrayList 适用于查询元素较频繁的场合3、请说明HashSet,TreeSet有何不同 ,各自适用于哪些场合?1、TreeSet中的数据就是自动排好序的,不允许放入null 值2、HashSet 中的数据就是无序的,可以放入null,但只能放入一个null, 两者中的值都不能重复 ,就如数据库中唯一约束3、 HashSet 要求放入的对象必须实现HashCode()方法 ,放入的对象 ,就是
32、以 hashcode码作为标识的 ,而具有相同内容的String 对象 ,hashcode就是一样 ,所以放入的内容不能重复。但就是同一个类的对象可以放入不同的实例4、 请说明 HashMap、TreeMap 有何不同 ,各自适用于哪些场合?HashMap 通过 hashcode对其内容进行快速查找,而 TreeMap 中所有的元素都保持着某种固定的顺序 ,如果您需要得到一个有序的结果您就应该使用TreeMap(HashMap 中元素的排列顺序就是不固定的)。5、 Iterator 与 For 循环都可以用于遍历集合中的元素,请问有何不同之处。Iterator:通用 ,对于所有集合,使用 It
33、erator 性能都一样 , 客户端自身不维护遍历集合的指针 ,所有的内部状态(如当前元素位置,就是否有下一个元素)都由 Iterator 来维护 ,而这个Iterator 由集合类通过工厂方法生成,因此 ,它知道如何遍历整个集合。客户端从不直接与集合类打交道,它总就是控制Iterator,向它发送 向前 ,向后 , 取当前元素 的命令 ,就可以间接遍历整个集合。For 循环 :虽然与 Iterator 性能差不多 ,但就是在查找链表如LinkedList 的时候遍历集合的开销会差别很大! 就以 LinkedList来说 ,用 get(i)方法来取元素的主要代码, 我们可以精品资料 - - -
34、 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 14 页 - - - - - - - - - - Java 集合框架实验报告瞧到 ,LinkedList 内的 get(i) 方法 ,用了循环方式来返回元素,性能肯定会差、6. 简单地分析比较不同集合类在选用上的主要原则。List 接口可以存储重复的数据。并且可以基于位置(下标 )操作集合。当增删改频繁的时候用LinkedList 。当查询频繁时用ArrayList Map 接口类似数学中的映射。对象的管理就是一组键-值得映射关系。主要就是适用于数量较多的对象管理。希望通过KEY 快速的查到对应的value。HashMap 就是通过哈希表管理的,允许 null TreeMap 该映射按照键自然排序。不允许为空Set接口不允许有重复的元素。HashSet 通过哈希算法管理允许 null TreeSet按照元素自然的排序五.讨论、心得(可写遇到的问题及解决方法,或者对技术的理解等) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 14 页 - - - - - - - - - -