实验五 集合类与泛型
- 格式:doc
- 大小:100.50 KB
- 文档页数:10
第2章集合与泛型2.1 集合概述所谓集合是特殊元素们的一种聚合。
集合的元素被称为是成员。
集合有两个最重要的属性,一个是集合成员都是无序的,另一个则是集合的成员不会出现超过一次。
在计算机科学领域内集合扮演着非常重要的角色,但是不把集合包含作为C#语言的一种数据结构。
2.1.1 集合的定义人们把集合定义成相关成员的无序聚集,而且集合中的成员不会出现超过一次。
集合书写成用一对闭合大括号包裹成员列表的形式,例如{0,1,2,3,4,5,6,7,8,9}。
只要全部成员只书写一次,就可以按照任意顺序书写集合,所以此前的集合实例还可以写成{9,8,7,6,5,4,3,2,1,0}或其他任意成员组合的形式。
为了使用集合需要知道一些有关集合的定义。
1. 不包含任何成员的集合称为空集合。
全域是所有可能成员的集合。
2. 如果两个集合包含完全一样的成员,那么就认为这两个集合相等。
3. 如果第一个集合的全部成员都包含在第二个集合内,就认为第一个集合是第二个集合的子集。
2.1.2 集合的操作下面描述了在集合上执行的基本操作。
1. 联合:由第一个集合中的所有成员和第二个集合中不包含在第一个集合的成员组成的新集合。
2. 交叉:由既属于第一个集合又属于第二个集合的成员组成的新集合。
3. 差异:由属于第一个集合但不属于第二个集合的成员组成的新集合。
2.2 集合类ArrayList是与数组相当的集合类。
还有其他类型的集合:队列、栈、有序表和哈希表,如下所示:●ArrayList 动态数组●Queue 队列●Stack 栈●BitArray 位数组●Hashtable 散列表●SortedList 有序表集合类位于System.Collections命名空间,集合类可以组合为集合,存储Object类型的元素。
2.3 集合的一种实现HashTable类是.NET框架类库中较为有效的数据结构之一,它的存取速度较其它类而2.1 泛型概述泛型(Generic Type)是.NET Framework 2.0的一大特性。
第一个问题:怎么才能了解JAVA集合类?集合类是什么?数组是集合的一种,是集合的一个子集,你理解了数组就理解了集合.理解集合类集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
(1)集集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。
对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。
它实现的是SortedSet接口,也就是加入了对象比较的方法。
通过对集中的对象迭代,我们可以得到一个升序的对象集合。
(2)列表列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。
关于实现列表的集合类,是我们日常工作中经常用到的,将在后边的笔记详细介绍。
(3)映射映射与集或列表有明显区别,映射中每个项都是成对的。
映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。
关键字应该是唯一的。
关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。
理想情况下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。
集合类简介java.util中共有13个类可用于管理集合对象,它们支持集、列表或映射等集合,以下是这些类的简单介绍集:1. HashSet:使用HashMap的一个集的实现。
浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称集合框架与泛型学生姓名专业班级学号一. 实验目的和要求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的功能。
集合类和泛型⼀、集合类集合类和数组同是容器,有何不同?1.数组的长度是固定的,集合类的长度不固定2.数组存储基本类型,集合类存储对象,集合中不能存基本数据类型。
集合容器因为内部数据结构不同,有多种具体容器。
不断向上抽取,就形成了集合框架。
框架的顶层为Collection接⼝。
(⼀)LIst有序的Collection,此处有序是指数据存⼊的顺序。
特点:1.有序,存⼊和取出的顺序⼀致2.所有元素有⾓标(素引)LIst常见的特有⽅法有⼀个共同的特点,就是可以操作⾓标。
List list=new ArrayList();list.add("a1");list.add("a2");Iterator it=list.Iterator();while(it.hasNext()){Object obj=it.Next();if (obj.equals("a2")){list.add("a3");}}上述代码在执⾏时是错误的,因为List类的迭代器在使⽤时容器长度是固定的,不能在迭代时修改容器的长度。
要修改上述错误,我们不能在迭代时修改容器的长度,但是我们可以修改迭代器的长度。
可以使⽤Iterator接⼝的⼦接⼝ListIterator来实现。
代码如下:List list=new ArrayList();list.add("a1");list.add("a2");Iterator it=list.listIterator(); //使⽤列表迭代器while(it.hasNext()){Object obj=it.Next();if (obj.equals("a2")){it.add("a3"); //使⽤迭代器的插⼊⽅法}}List接⼝的有三种:(⼀般除了Vector外,都是不同步的。
实验报告_实验7 泛型与集合(学生学号_姓名)一、实验目的1.理解泛型的概念及泛型的简单使用2.掌握集合接口及其实现类的概念;Set接口:HashSet、TreeSet、List接口:ArrayList、LinkedList、VectorMap接口:HashMap、TreeMap、Hashtable3.掌握集合元素的遍历方法;4.熟悉Java中的装箱、拆箱操作。
二、实验步骤3、(基础题)填充VectorTest.java程序所缺代码,编译并运行程序;程序所缺代码:Vector vec = new _____①___Vector__();vec. ②add(number);for(int i = 0; i < vec.____③size()_____; i++){System.out.println(vec.____④_get___(i));4、(基础题)阅读并运行下面代码,比较Set接口、List接口、Map接口的异同点,并回答问题,:问题:如何为程序中的集合指定类型?Set<String> hs = new HashSet<>();ArrayList<String> al = new ArrayList< String> ();Map<Integer,String> hm = new HashMap<Integer,String> ();5、(基础题)下面程序所实现的功能是:Hashtable,LinkedList写入或读取时间的比较:程序所缺代码:import _____①__java.util.*____;for(int i = 0; i < 100000; i++) {table. put②(""+i, new Integer(i));}for(int i = 0; i < 100000; i++){table. ___get_③_____ (""+i);}for(int i = 0; i < 100000; i++){list. ___add_④____ (new Integer(i));}callTime = ____System.currentTimeMillis();___⑤_______for(int i = 0; i < 100000; i++){list.____get_⑥______(i);}问题:在读取数据时, Hashtable与LinkedList相比,哪个效率更高?Hashtable6、(基础题)本程序的功能是:获取系统的系统属性值并输出,请参考课件,填充所缺少代码,并运行程序:程序所缺代码:Properties systemProperties = System. _____①getProperties ______ (); Enumeration enum1 = systemProperties. ②propertyNames(); while(enum1. ____③__ hasMoreElements ___ ()){String key = (String)enum1.nextElement();String pro = systemProperties. ____④_ getProperty ___ (key);System.out.println(key + "=" + pro);}}}。
Java语言程序设计C实验报告集合框架及泛型机制学生姓名专业、班级________________________________________ 指导教师 _______________________________________ 成绩_______________________________计算机与信息工程学院年月日一、实验目的学习课程相关章节知识,通过上机练习,掌握以下知识:1.掌握List 接口下ArrayList 及LinkedList 的使用方法。
2.掌握Map 接口下HashMap 及HashTable 的使用方法3.掌握集合中泛型的使用二、实验内容利用集合完成象数据库那样存储数据,并且可以简单查询,利用map 存储学生信息,字段如下:id ,name,age ,实现步骤:(1)创建类,类图如下:2)在main 方法编写逻辑代码3)运行程序并测试结果package ;public class Student {private String name ;private int age ;private String id ;public String getName() {return namepublic 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 ;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;public class Databace {private Student a;public Databace() {super ();map = new HashMap<String,Student>();}public Student getA() {return a;}public void setA(Student a) {this .a = a;}HashMap<String,Student> map ;public void delete(){ID" );System. out .println( " 请输入要删除表中元素String id =Test. sc.next();if (map .containsKey( id)){map .remove( id);Collection<Student> c= map .values();IteratorvStude nt> it= c.iterator();while (it .hasNext()){a= it .n ext();a.sayHi();}}else{System. out .println("表中没有该元素");}}public void in sert(){System. out .println("按顺序输入id、age、name");String name =Test. sc.next();int age =Test. sc.n ext In t();String id =Test. sc.next();a= new Student( name ,age ,id );map .put( id , a);System. out .println("成功的插入一条记录”);public void update(){System. out .println("请输入要修改表中元素ID");String id =Test. sc.next();if (map .containsKey( id)){map .remove( id);System. out .println("按顺序输入name,age,id");id =Test. sc.next();String name =Test. sc.next();int age =Test. sc.nextInt();a= new Student( id ,age ,name );map .put( id , a);}else{System. out .println("表中没有该元素");}}public void select()System. out .println("请输入要查询的方式 1.查询单行 2.查询全部"); int i=Test. sc.nextInt();switch (i){case 1:{System. out .println("请输入要查询表中元素ID");String id =Test. sc.next();{a= map .get( id);a.sayHi();}else{System. out .println("表中没有该元素");}}break ;case 2:{Collection<Student> c=map .values();Iterator<Student> it= c.iterator();while (it .hasNext()){a= it .next();a.sayHi();}}break ;}}}//testpackage ;import java.util.*;public class Test {/*** @param args */public static Scanner sc= new Scanner(System. public static void main(String[] args ){// TODO Auto-generated method stuint i=0;Databace d = new Databace();while (i==0){int j=Test. sc.nextInt(); switch (j){case 1:d .insert(); breakcase 2: d .select(); breakcase 3: in);System. out .println( System. out .println( System. out .println( System. out .println( System. out .println( "1.储存学生信息") "2.查询学生信息") "3.修改学生信息") "4.删除学生信息") "退出");d .update(); breakcase 4:d .delete(); break default :i=1;}}}}提示:用id 做map 集合的键部分,用student 对象做map 集合的值部分效果显示:三、实验思想四、实验结果五、实验心得。
实验五集合类与泛型1.实验目的(1)掌握ArrayList类与LinkedList类的用法;(2)掌握TreeSet类的用法;(3)掌握Map接口及其实现类的用法(4)掌握泛型的用法。
2.实验内容实验题1 有四个类,主类Store在包.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类, Product类实现Comparable接口,重写了Comparable接口中方法compareTo,实现了product对象按照价格排序。
基本要求:(1)在主类Store中实例化多个Mobile类与Mp3Player的实例,分别将这些实例用ArrayList与LinkedList存放,最后用StringBuiler存放并将其输出。
(2)用迭代器(iterator)将实例对象输出(要求用加强型for循环)。
Store类package .nwsuaf.jp.p44;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import javax.swing.JOptionPane;import .nwsuaf.jp.p4.data.Mobile;import .nwsuaf.jp.p4.data.Mp3Player;import .nwsuaf.jp.p4.data.Product;public class Store {public static int count=0;public static void main(String[] args) {Mobile m1=new Mobile("E365 on china Mobile",1780);Mobile m2=new Mobile("E3330 on china Mobile",1450);Mp3Player mp1=new Mp3Player("Meiz0 X3 (256MB)",399);Mp3Player mp2=new Mp3Player("Meiz0 E5 (512MB)",580);Mp3Player mp3=new Mp3Player("Xlive XM Mp3Player(256MB)",930);Product p[]={mp2,mp1,mp3,m1,m2};Arrays.sort(p);StringBuilder text=new StringBuilder();for(Product i:p){text.append(i).append("\n");}System.out.println("用StringBuiler输出:\n"+text);List<Product> list1=new ArrayList<Product>();//用到泛型因为Product是mp3和mobil的总类,ArrayList只能放一种类型List<Product> list2=new LinkedList<Product>();for(int i=0;i<p.length;i++)list1.add(p[i]);for(int i=0;i<p.length;i++)list2.add(p[i]);Iterator<Product> it=list1.iterator();System.out.println(" 用 ArrayList或LinkedList迭代器输出:");while(it.hasNext()){Product p1=it.next();System.out.println(p1);}}}实验题2 项目包含类见实验题1。
基本要求:(1)在主类Store中实例化多个Mobile类与Mp3Player的实例,分别将这些实例用TreeSet存放,最后用StringBuiler存放并将其输出。
(2)用迭代器(iterator)将实例对象输出。
Store类package .nwsuaf.jp.p44;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Set;import java.util.TreeSet;import javax.swing.JOptionPane;import .nwsuaf.jp.p4.data.Mobile;import .nwsuaf.jp.p4.data.Mp3Player;import .nwsuaf.jp.p4.data.Product;public class Store {public static int count=0;public static void main(String[] args) {Mobile m1=new Mobile("E365 on china Mobile",1780);Mobile m2=new Mobile("E3330 on china Mobile",1450);Mp3Player mp1=new Mp3Player("Meiz0 X3 (256MB)",399);Mp3Player mp2=new Mp3Player("Meiz0 E5 (512MB)",580);Mp3Player mp3=new Mp3Player("Xlive XM Mp3Player(256MB)",930);Product p[]={mp2,mp1,mp3,m1,m2};Arrays.sort(p);StringBuilder text=new StringBuilder();for(Product i:p){text.append(i).append("\n");}System.out.println("用StringBuiler输出:\n"+text);Set<Product> set1=new TreeSet<Product>();//用到泛型因为Product是mp3和mobil的总类,ArrayList只能放一种类型for(int i=0;i<p.length;i++)set1.add(p[i]);Iterator<Product> it=set1.iterator();System.out.println(" 用TreeSet迭代器输出:");while(it.hasNext()){Product p1=it.next();System.out.println(p1);}}}实验题3 项目包含类见实验题1。
基本要求:(1)在主类Store中实例化多个Mobile类与Mp3Player的实例,分别将这些实例用HashMap与TreeMap 存放,最后用StringBuiler存放并将其输出。
(2)用迭代器(iterator)将实例对象输出。
package .nwsuaf.jp.p44;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Set;import java.util.TreeSet;import javax.swing.JOptionPane;import .nwsuaf.jp.p4.data.Mobile;import .nwsuaf.jp.p4.data.Mp3Player;import .nwsuaf.jp.p4.data.Product;public class Store {public static int count=0;public static void main(String[] args) {Mobile m1=new Mobile("E365 on china Mobile",1780);Mobile m2=new Mobile("E3330 on china Mobile",1450);Mp3Player mp1=new Mp3Player("Meiz0 X3 (256MB)",399);Mp3Player mp2=new Mp3Player("Meiz0 E5 (512MB)",580);Mp3Player mp3=new Mp3Player("Xlive XM Mp3Player(256MB)",930);Product p[]={mp2,mp1,mp3,m1,m2};Arrays.sort(p);StringBuilder text=new StringBuilder();for(Product i:p){text.append(i).append("\n");}System.out.println("用StringBuiler输出:\n"+text);Map<Float,String> map1=new HashMap<Float,String>();for(int i=0;i<p.length;i++){map1.put(p[i].getPrice(), p[i].getName());}Set<Map.Entry<Float, String>> set1=null;set1=map1.entrySet();Iterator<Map.Entry<Float, String>> it=null;it=set1.iterator();System.out.println("用迭代器输出:");while(it.hasNext()){Map.Entry<Float, String> a=it.next();System.out.println(a.getValue()+" "+a.getKey());}}}因为HashMap与TreeMap的存放与用迭代器方法一样,这里只列出HashMap 的实验题4 有四个类,主类Store在包.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类。