实验五 集合类与泛型
集合与泛型
第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的一大特性。
05C#集合和泛型xm
键来确定数据结构中条目的位置。在现实的字典中,这种算法就是以 字母顺序来排列单词。
• 在.NET中,基本的字典是由类Hashtable来表示的,且假定键和条
目都是Object类型。
• 虽然HashTable表示可以存储任何东西的一般字典,但也可以自定义
更具体的字典类。MS提供了一个抽象基类DictionaryBase,它具 有基本的字典功能,从中可以派生自己的字典类。还有一个已经建立 好的.NET基类 System.Collections.Specialized.StringDictionary,如 果键是字符串,就可以使用它来替代Hashtable。
ArrayList arr = new ArrayList();
• 这行代码创建了容量为16的ArrayList对象。也可以在实例化
ArrayList时,指定最初的容量。例如: ArrayList arr = new ArrayList(20);
• 也可以在实例化后,使用Capacity属性指定ArrayList的容
引。 – 可以存储地址,索引是邮政编码。 – 可以存储对象或人的任何数据,其索引是对象或人的名字。
• 尽管任何类的对象都可以用作字典的索引键,但在此之前,需
要对类执行某些功能,通常要执行方法GetHashCode(),所 有的类和结构都从System.Object继承了这个方法。
字典
• 要建立一个字典,有3个条件: – 要查找的数据。 – 键。 – 在字典中查找数据的算法。 • 算法是字典的重要部分。只知道键是不够的,还需要一种方式,利用
通过索引删除对象 通过指定对象删除 取得删除后的第一个对象
Student leave = (Student)students[0]; leave.SayHi(); 只剩一个对象 剩余的元素会自动调整索引
05C#集合和泛型_xm
ArrayList第一个对 第一个对 象的索引是0 象的索引是
9
集合类型举例-删除 集合类型举例 删除ArrayList的元素 删除 的元素
ArrayList.Remove(对象名 //删除指定对象名的对象 对象名) 删除指定对象名的对象 对象名 ArrayList.RemoveAt(index) //删除指定索引的对象 删除指定索引的对象 ArrayList.Clear() //清除集合内的所有元素 清除集合内的所有元素 students.RemoveAt(0); students.Remove(zhang); 通过索引删除对象 通过指定对象删除 取得删除后的第一个对象
集合属性
修改或者获取ArrayList的容量 修改或者获取ArrayList的容量 ArrayList
使用Capacity属性,通过设置该属性的值可以修改 属性, 使用 属性 ArrayList的容量;读取该属性的值可以获取 的容量; 的容量 读取该属性的值可以获取ArrayList的容 的容 量 当为ArrayList对象添加的数据元素的个数超出初始化时指 对象添加的数据元素的个数超出初始化时指 当为 定的数据项个数时, 定的数据项个数时,ArrayList对象的容量还可以自动增长 对象的容量还可以自动增长 默认增长后的容量为原来的2倍 默认增长后的容量为原来的 倍,即数据项的个数为初始化 时的2倍。 时的 倍
泛型——List<T> 泛型
创建T类型对象的泛型集合语法为: 创建T类型对象的泛型集合语法为: 泛型对象名=new List<T> 泛型对象名=new List<T>(); 添加泛型List<T> List<T>的数据项 添加泛型List<T>的数据项 Add():向列表尾部添加,输入参数为T Add():向列表尾部添加,输入参数为T类型数据 AddRange():向列表尾部添加,输入参数为T AddRange():向列表尾部添加,输入参数为T类 型对象组 Insert():向指定位置添加, Insert():向指定位置添加,输入数据为位置索 引和要添加的对象( 类型) 引和要添加的对象(T类型)
集合与泛型
第一个问题:怎么才能了解JAVA集合类?集合类是什么?数组是集合的一种,是集合的一个子集,你理解了数组就理解了集合.理解集合类集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
(1)集集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。
对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。
它实现的是SortedSet接口,也就是加入了对象比较的方法。
通过对集中的对象迭代,我们可以得到一个升序的对象集合。
(2)列表列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。
关于实现列表的集合类,是我们日常工作中经常用到的,将在后边的笔记详细介绍。
(3)映射映射与集或列表有明显区别,映射中每个项都是成对的。
映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。
关键字应该是唯一的。
关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。
理想情况下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。
集合类简介java.util中共有13个类可用于管理集合对象,它们支持集、列表或映射等集合,以下是这些类的简单介绍集:1. HashSet:使用HashMap的一个集的实现。
java实验报告——异常、集合类和泛型
for(int x=13;x<Stu.length;x++) {
Stu[x]-generated method stub //XueShengXinXi[] Stu=ChuShiHua(); //初始化系统数据 XueShengXinXi[] Stu=new XueShengXinXi[100]; Stu[0]=new XueShengXinXi("专业", "班级", "姓名", "性别", "电话", "家庭住址 "); Stu[1]=new XueShengXinXi(" 自 动 化 ", " 自 动 化 10-1", " 张 三 ", " 男 ", "63256", "fnhjfdhsdbh"); Stu[2]=new XueShengXinXi("自动化", "自动化10-2", "李四", "女", "653256", "nfhggdfddhsdbh"); Stu[3]=new XueShengXinXi(" 电 子 ", " 电 子 10-1", " 王 五 ", " 男 ", "6156", "fnhvjbh");
学号姓名--集合框架与泛型实验报告
浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称集合框架与泛型学生姓名专业班级学号一. 实验目的和要求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 泛型与集合(学生学号_姓名)
实验报告_实验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实验报告材料-集合框架及泛型机制
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 集合的值部分效果显示:三、实验思想四、实验结果五、实验心得。
Java集合类和泛型
Java集合框架 Java集合框架允许在java集合类对象中存储各种 数据类型的元素。集合框架包含的类如下
集合类
列表(List)、集合(Set)和映射(Map)接口: java.util.List接口: 能包含重复元素的有序集合 比如:{1,2,4,1,6,7,2,5,5}
java.util.Set接口:不包含重复元素的集合 (不 保证集合的迭代顺序) 比如:{„a‟,‟b‟,‟e‟,‟d‟}
java.util.Map接口: Map接口是将键映射到值的对象 键/值对 键:不重复 值:每个键最多只能映射一个
比如:{{1,“小明”},{2,”小强”},……}
数组序列类(ArrayList)的使用和迭代器(Iterator)
(ArrayList)实现了List接口,List 接口的大小 可变数组的实现,执行速度比Vector快。 构造方法ArrayList():将构造一个初始容量为 10 的空列表 java.util.Iterator:用于集合中的元素的遍历
集合类的典型应用是存储相同元素,为了
此目的,要求定义集合时,规定向集合中 添加的元素均为同一中类型。
所谓泛型,就是在创建集合对象是规定其
允许保存的元素类型。
通过使用泛型,保证了集合类中存储的元
素数据类型相同。
ArrayList使用泛型
ArrayList存储不同 类型的元素时出错
ArrayList也可以存储不 同类型的元素
பைடு நூலகம்
使用 Iterator 接口实现元素的遍历 Iterator 接口中的方法: 方法hasNext():判断迭代器中是否有下一个元素。 方法next():返回迭代的下一个元素。 方法remove():从迭代器指向的集合中删除元素。
.NET集合与泛型实验报告
实验报告课程名称.NET程序设计实验项目.NET集合与泛型专业计科班级 1 姓名学号指导教师实验成绩年月日一、实验目的(介绍本次实验的预期目标,完成的功能)1.初步掌握常用集合的创建和操作方法。
2.初步掌握索引器的定义与使用。
3.初步掌握泛型接口、泛型类、泛型属性和泛型方法的使用。
4.初步理解C#程序的特点。
二、实验过程(介绍实验中涉及的关键过程,如核心算法、数据结构等)1.编写一个电脑信息类:包括电脑的型号、价格和出厂日期。
程序应根据用户输入的型号来显示相应的电脑信息。
要求使用Hashtable对象存储电脑信息,并且按照型号排列输出,可以输入一个型号,程序检查判断集合中是否存在该型号的电脑,如果存在则显示具体信息。
并可以通过输入型号,删除某型号的电脑。
选择“文件”→“新建”→“项目”菜单命令,弹出“新建项目”对话框,在“模板”列表框中选择“控制台应用程序”。
首先创建一个Computer类,属性有电脑型号、价格、出厂日期,构造函数里赋值。
代码如图1-1所示:图1-1 Computer类源代码然后写一个静态方法,将电脑的详细信息再作为一个元素存在Hashtable 集合中。
代码如图1-2所示:图1-2 “输入电脑信息”方法源代码编写一个按型号排序电脑信息的静态方法,借助ArrayList的排序功能来实现,并且在屏幕打印出排序后的电脑信息。
如图1-3所示:图1-3 “按电脑型号排序”方法源代码编写一个查询电脑信息的静态方法,用户需要输入电脑型号,如果存在该型号的电脑就在屏幕打印该电脑的详细信息,如果不存在就提示用户“您所输入的型号不存在!”。
如图1-4所示:图1-4 “查询电脑信息”方法源代码编写一个删除电脑信息的静态方法,用户需要输入电脑型号,如果存在该型号的电脑就删除对应的电脑信息,并提示“该型号电脑信息已删除!”。
如果不存在就提示用户“您所输入的型号不存在!”。
如图1-5所示:图1-5 “删除电脑信息”方法源代码最后编写了一个菜单方法,用户可以在屏幕输入选项来执行相应功能。
集合及泛型的使用实验
集合及泛型的使用实验1、在main方法中运用ArrayList实现三人斗地主游戏中的发牌功能,具体如下:(1) 创建两个String类型数组,其中一个用于存储牌的花色("黑桃", "红桃", "梅花", "方块"四种花色),一个用于存储牌的数字("A", "2", "3", "4",..."K"十三种数字);(2) 创建一个ArrayList集合作为牌盒,先将不同花色不同数字的牌循环添加到集合中,最后别忘了将”大王”,”小王”也添加到ArrayList集合中;(3) 用Collections工具类的shuffle()方法洗牌。
如:Collections.shuffle(al) //al为一集合对象,该方法用于打乱al中元素的顺序(4) 创建三个ArrayList集合作为三个人的牌的集合,并循环发牌,共发51张牌,留三张底牌;(5) 打印出三个人的牌和集合中留的三张底牌。
mport java.util.ArrayList;import java.util.Collections;import java.util.List;public class PokerTest{public static void main(String[] args){ArrayList<String> box = new ArrayList<String>();String[] arr = {"黑桃","红桃","梅花","方块"};String[] arr2 = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};for (int i = 0; i < arr.length; i++){for (int j = 0; j < arr2.length; j++){box.add(arr[i]+arr2[j]);}box.add("大王");box.add("小王");}Collections.shuffle(box);ArrayList<String> zhangsan = new ArrayList<String>();ArrayList<String> lisi = new ArrayList<String>();ArrayList<String> me = new ArrayList<String>();for (int i = 0; i < box.size()-3; i++) {if(i%3 == 0) {zhangsan.add(box.get(i));}else if(i%3 == 1) {lisi.add(box.get(i));}else if(i%3 == 2) {me.add(box.get(i));}}System.out.println("zhangsan:"+zhangsan);System.out.println("lisi:"+lisi);System.out.println("me:"+me);System.out.println("底牌:");System.out.println(box.get(box.size()-1));System.out.println(box.get(box.size()-2));System.out.println(box.get(box.size()-3));}}2、按要求完成功能:(1) 设计Employee类,该类有成员变量(属性)工号—eno(String类型)、姓名—name(String类型)、年龄—age(int类型)、工资—salary(double类型)等,且为私有的,该类有对成员变量(属性)初始化的构造方法、设置成员变量(属性)的set方法以及获得成员变量(属性)的get方法;(2) 创建3个Employee对象,基本信息如下:工号姓名年龄工资001 张三 25 3000002 李四 27 4000003 王五 28 5500(3) 创建泛型的Map集合,保存以上三个Employee对象,其中Key为工号,value为Employee对象,对该Map进行遍历,输出所有职工信息。
第08章集合类与泛型程序设计
第08章集合类与泛型程序设计集合类是Java中最常用的一种数据结构,通过集合类可以很方便地存储和操作一组数据。
集合类分为两种:Collection和Map。
Collection是一个接口,代表一组对象,是集合类的根接口。
Collection下面有许多不同的子接口和实现类,常见的有List和Set。
List是一个有序的集合,可以按照插入顺序访问元素,可以包含重复元素。
Set是一个没有重复元素的集合,不保证顺序。
List有两个主要的实现类:ArrayList和LinkedList。
ArrayList是一个基于数组的实现类,可以随机访问元素,插入和删除元素的操作效率较低。
LinkedList是一个基于链表的实现类,插入和删除元素的操作效率较高,但是随机访问元素的效率较低。
Set有三个主要的实现类:HashSet、LinkedHashSet和TreeSet。
HashSet是一个基于哈希表的实现类,可以快速查找元素,但是不保证元素的次序。
LinkedHashSet是一个具有可预测迭代顺序的Set,底层数据结构是哈希表和链表。
TreeSet是一个具有排序功能的Set,底层数据结构是二叉树,元素会被排序。
Map是一个键值对的映射表,用于存储一组互不相同的键值对。
常见的实现类有HashMap、LinkedHashMap和TreeMap。
HashMap是基于哈希表的实现类,可以快速查找键值对,不保证键值对的顺序。
LinkedHashMap 是一个具有可预测迭代顺序的Map,底层数据结构是哈希表和链表。
TreeMap是一个具有排序功能的Map,底层数据结构是红黑树,键值对会被排序。
泛型程序设计是Java中的一种编程方式,可以使代码更加灵活和安全。
泛型程序设计可以实现编译时类型检查,减少运行时错误。
在集合类中,泛型可以指定集合中保存的元素类型。
例如,List<String>表示一个只能保存String类型元素的List。
Java程序设计课件:泛型与集合
List的常用方法
方法名 add(int index, E element) addAll(int index, Collection<?
extends E> c) get(int index)
indexOf(Object o)
lastIndexOf(Object o)
程序员使用集合框架提供的接口和类,在具体应 用时,不必考虑这些数据结构算法的实现细节, 只需用这些类创建对象并直接应用即可,这大大 提高了编程效率。
2023/12/28
8/35
6.2.1集合框架
核心接口主要有Collection、List、Set、 Queue、Deque和Map。
Collection
方法名 add(E e) clear() equals(Object o) isEmpty() size() iterator() hashCode() toArray() removeAll(Collection<?> c) retainAll(Collection<?> c) contains(Object o) remove(Object o) containsAll(Collection<?> c)
将集合 c中的所有元素添加到当前集合中,添加成功 返回true。
11/35 2023/12/28
Set 接口
Set接口用来描述数据结构中的集合。它具有 与 Collection 完全一样的接口,只是Set 不 保存重复的元素,向Set添加元素时,不保证 元素添加后与添加的顺序一致。实现它的常 用子类有TreeSet类和HashSet类。
remove(int index) set(int index, E element) listIterator()
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<String,Student>();}public Student getA() {return a;}public void setA(Student a) {this、a = a;}HashMap<String,Student> map;public void delete(){System、out、println("请输入要删除表中元素ID");String id=Test、sc、next();if(map、containsKey(id)){map、remove(id);Collection<Student> c=map、values();Iterator<Student> it=c、iterator();while(it、hasNext()){a=it、next();a、sayHi();}}else{System、out、println("表中没有该元素");}}public void insert(){System、out、println("按顺序输入id、age、name");String name=Test、sc、next();int age=Test、sc、nextInt();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();if(map、containsKey(id)){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 com、cn;import java、util、*;public class Test {/*** @param args*/public static Scanner sc=new Scanner(System、in);public static void main(String[] args){// TODO Auto-generated method stuint i=0;Databace d=new Databace();while(i==0){System、out、println("1、储存学生信息");System、out、println("2、查询学生信息");System、out、println("3、修改学生信息");System、out、println("4、删除学生信息");System、out、println("退出");int j=Test、sc、nextInt();switch(j){case 1:d、insert();break;case 2:d、select();break;case 3:d、update();break;case 4:d、delete();break;default:i=1;}}}}提示:用id做map集合的键部分,用student对象做map集合的值部分效果显示:三、实验思想四、实验结果五、实验心得。
实验05 集合类与泛型 实验报告
实验05 集合类与泛型实验报告实验五集合类与泛型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存放,最后用StringBuilder存放并将其输出。
(2)用迭代器(iterator)将实例对象输出(要求用加强型for循环)。
实验结果:代码: Store类:package .nwsuaf.jp.p4; import java.util.ArrayList; importjava.util.Arrays; import java.util.Iterator; import.nwsuaf.jp.p4.data.Mobile; import .nwsuaf.jp.p4.data.Mp3Player; import .nwsuaf.jp.p4.data.Product; public class Store { publicstatic void main(String[] args) { Mp3Player p1 = new Mp3Player(\, 399.0f); Mp3Player p2 = new Mp3Player(\, 580.0f); Mp3Player p3 = new Mp3Player(\XMMp3Play(256MB)\, 930.0f); Mobile m1 = new Mobile(\, 1780.0f); Mobile m2= new Mobile(\, 1450.0f); Product[] products = { p1, p2, p3, m1, m2 }; Arrays.sort(products); ArrayList list = new ArrayList(); for (int i = 0;i < products.length; i++) { list.add(products[i]); }// 用StringBuilder输出 StringBuilder text = new StringBuilder(); for (Product product : products) { text.append(product); text.append(\); } System.out.println(\用StringBuilder输出:\); System.out.println(\ + \ + text+ \ + Product.getCount() + \); // 用迭代器输出 Iterator it = list.iterator(); System.out.println(\用迭代器输出:\); System.out.println(\); while(it.hasNext()) { System.out.println(it.next()); } System.out.println(\are\ + Product.getCount() + \products.\); } }Product类:package .nwsuaf.jp.p4.data; @SuppressWarnings(\) public abstractclass Product implements Comparable { private String Name; private Float price; public static int count = 0; public Product(String name, Floatprice) { super(); Name = name; this.price = price; ++count; }public String getName() { return Name; } public void setName(String name) { Name = name; } public Float getPrice() { return price; } public void setPrice(Float price) { this.price = price; } public staticint getCount() { return count; } public static void setCount(int count){ Product.count = count; } @Override public String toString(){ return getName() + \ + getPrice() + \; } public abstract voidoutput(Product p); @Override public int compareTo(Object o) { // TODOAuto-generated method stub Product product = (Product) o; return newFloat(getPrice()).compareTo(product.getPrice()); } public void sell(int i) { // TODO Auto-generated method stub }}Mp3Playert类:public class Mp3Player extends Product { public Mp3Player(String name,Float price) { super(name, price); } @Override public voidoutput(Product p) { System.out.println( Mp3Player.class.toString()); } } Mobile类:package .nwsuaf.jp.p4.data; public class Mobile extends Product{ public Mobile(String name, Float price) { super(name, price); }@Override public void output(Product p){ System.out.println( Mobile.class.toString()); } } 实验题2 项目包含类见实验题1。
泛型实验要求
泛型实验实验时间:2009年3月2实验目的:掌握泛型与其他集合相比的优势,创建泛型类,泛型方法,可空类型的运用,编译程序集的方法。
实验准备:打开VS2005,新建一个空白解决方案,命名为lab2,存储在d盘根目录。
实验内容:一,泛型与集合安全的比较1,在解决方案里面,新建一个控制台应用程序命名为ListArray 2, 在Program.cs的入口函数中,创建一个ArrayList集合,往集合里面添加2个Int数字,再添加一个double数字3, 再定义一个int变量total初始值为04, 利用循环语句foreach把集合里面的int变量相加的和存入total5, 输出total的值,预览下效果思考:如果出错,出错的原因在哪,如何更改6,注释掉上面代码,通过同样的方法,定义一个泛型List,实现同样的目的,测试调试,比较下2种方法有什么区别和进步的地方。
二,创建泛型类1,在解决方案里面再新建一个控制台应用程序命名为ListClass,设置为启动项2, 新建一个类,命名为ListTest,在类中创建一个名称称为MyList 泛型类,为把它参数化,插入一个尖括号。
在<>内的添加T代表使用该类时要指定的类型3, 在MyList类中定义一个静态字段ObjCount,初始值为0,在构造器中实现自加,实现功能:计算用户实例化了多少个不同类型的对象。
再创建一个属性字段getCount用于取得静态字段ObjCount 的值4, 在Program.cs的入口函数Main中,实例2个int类型的MyList 类,1个double类型的Mylist类,用控制台输出每个实例的getCount属性。
思考:getCount的值有什么特性?泛型类的优势三,创建泛型方法1,在解决方案里面再新建一个控制台应用程序命名为ListMethod,设置为启动项1,在Program.cs中,创建一个无返回值的泛型方法Copy,它有2个泛型参数,实现功能,复制泛型参数1里的所有子元素到泛型参数2中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五集合类与泛型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的子类。