实验七:Java集合与泛型
- 格式:doc
- 大小:87.50 KB
- 文档页数:3
集合框架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。
1. 集合框架2. 集合操作——线性表1. 集合框架1.1. Collectionjava提供了一种可以存数一组数据的数据结构,其提供了丰富的方法,在实际开发中往往比数组使用的广泛。
这种数据结构成为集合:Collection。
Collection是一个接口,其定义了集合的相关功能方法。
1.1.1. addAll与containsAll方法集合也提供了批处理操作:addAll方法用于将给定集合中的所有元素添加到当前集合中,其方法定义为:例如:containsAll方法用于判断当前集合是否包含给定集合中的所有元素,若包含则返回true。
其方法定义为:01. b o o l e a n a d d A l l (C o l l e c t i o n c )01.C o l l e c t i o n <S t r i n g > c 1 = n e w A r r a y L i s t <S t r i n g >();02.c 1.ad d ("j a v a ");03.c 1.ad d ("c p p "); 04.c 1.ad d ("p h p ");05.c 1.ad d ("c #"); 06.c 1.ad d ("o b je c t i v e -c "); 07.S y s t e m .o u t .p r i n t l n (c 1); // [j a v a , c p p , p h p , c #, o b j e c t i v e -c ] 08.C o l l e c t i o n <S t r i n g > c 2 = n e w H a s h S e t <S t r i n g >(); 09.c 2.ad d A l l (c 1);10. S y s te m .o u t .p r i n t l n (c 2); // [c p p , p h p , c #, j a v a , o b j e c t i v e -c ]01. b o o l e a n c o n t a i n s A l l (C o l l e c t i o n c )Top例如:01.C o l l e c t i o n<S t r i n g>c1=n e w A r r a y L i s t<S t r i n g>();02.c1.a d d("j a v a");03.c1.a d d("c p p");04.c1.a d d("p h p");05.c1.a d d("c#");06.c1.a d d("o b j e c t i v e-c");07.S y s t e m.o u t.p r i n t l n(c1);//[j a v a,c p p,p h p,c#,o b j e c t i v e-c]08.C o l l e c t i o n<S t r i n g>c2=n e w A r r a y L i s t<S t r i n g>();09.c2.a d d("j a v a");10.c2.a d d("c p p");11.S y s t e m.o u t.p r i n t l n(c1.c o n t a i n s A l l(c2));//t r u e1.2. Iterator 迭代器Collection提供了一个遍历集合的通用方式,迭代器(Iterator)。
Java集合和泛型 ⼀、集合(Collections) Java使⽤集合来组织和管理对象。
1、Java的集合类 集合类主要负责保存、盛装和管理对象,因此集合类也被称为容器类。
集合类分为Set、List、Map和Queue四⼤体系。
Set 代表⽆序、不可重复集合;List 代表有序、可重复集合;Map 代表具有映射关系元素的集合;Queue 代表队列,实现元素的先进先出管理。
数组也是⼀种集合类,它是能随机存储和访问引⽤序列的诸多⽅法中最⾼效的⼀种,当追求⾼效的数据访问时,数组是很不错的选择。
2、集合与泛型 所有集合类都位于java.util包中,集合中只能保存对象的引⽤。
集合类把它所含有的元素看成是Object的实例,这样⽅便但是也有隐患,即多个类型不同的元素被放⼊⼀个集合中,会增加集合访问时类型转换的困难,甚⾄会产⽣错误。
泛型的引⼊改善了这种情况,使⽤泛型来限制集合⾥元素的类型,并让集合记住元素的类型。
这样可以允许编译器检查加⼊集合的元素类型,避免值类型不⼀致的错误。
3、Java集合框架介绍 集合框架是⼀个⽤来表⽰和操作集合的统⼀架构,包含实现集合的接⼝和类。
Java的整个集合框架围绕⼀组标准接⼝设计,开发者可以直接使⽤这些接⼝的标准实现,也可以使⽤集合框架接⼝实现⾃定义的集合实现类。
集合框架的设计应满⾜⼀下三个⽬标:⾼性能。
保证算法的实现效率。
互操作性。
⾼扩展性。
对集合进⾏扩展是简单的,只需要实现特定接⼝即可。
4、Java集合框架基于统⼀的⽅式组织和管理对象,包含3个⽅⾯:接⼝。
接⼝定义了集合操作的⾏为规约,它形成集合的⾼层视图。
实现类。
是集合接⼝的具体表现。
本质上说,是可重复使⽤的数据结构。
算法。
实现集合操作中常⽤的算法,⽐如搜索和排序。
这些算法通过多态实现,即相同的⽅法在相似的接⼝上有着不同的实现 5、集合接⼝ 集合框架定义了⼀组接⼝,接⼝申明了对特定类型的集合可以执⾏的操作。
Java集合:Collection、List、Set、Map、泛型0.集合的学习思路层⾯1:应⽤层⾯ √可以掌握重点的集合类的使⽤步骤层⾯2:理解层⾯【⾯试前掌握】理解ArrayList的源码理解HashMap的源码掌握:Collection和Map的对⽐List和Set的对⽐ArrayList和Vector的对⽐ArrayList和LinkedList的对⽐HashMap和Hashtable的对⽐Collections和Collection的对⽐⼀、集合的理解和好处1.理解集合:就是⼀种容器,都是⽤于保存⼀组元素2.集合和数组的对⽐:数组的不⾜:数组的长度必须提前指定,⽽且⼀旦指定不能更改数组只能保存相同类型的元素集合:集合在使⽤时,长度不⽤指定,⽽且可以实现⾃动扩容或截断集合没有指定泛型之前,默认保存的是任意类型的元素(Object类型)指定泛型之后,可以保存对应类型的元素⽰例代码:// 使⽤数组--------------------Animal[] animals = new Animal[3];animals[0] = new Animal();animals[1] = new Animal();animals[2] = new Animal();Animal[] newAni = new Animal[animals.length+1];//复制数组//添加新元素animals=newAni;// 使⽤集合--------------------List list= new ArrayList();list.add(new Animal());①创建时如果不指定容量初始值,Hashtable 默认的初始⼤⼩为11,之后每次扩充,容量变为原来的2n+1。
HashMap 默认的初始化⼤⼩为16。
之后每次扩充,容量变为原来的2倍。
②创建时如果给定了容量初始值,那么 Hashtable 会直接使⽤你给定的⼤⼩,⽽ HashMap 会将其扩充为2的幂次⽅⼤⼩(HashMap 中的tableSizeFor()⽅法保证,下⾯给出了源代码)。
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语言中的一种特殊语法,它允许在方法中定义一个或多个类型参数。
泛型方法使得我们可以在方法的声明和调用时指定参数的类型,从而实现代码的可重用性和类型安全性。
泛型方法的声明形式为:在方法返回类型之前加上`<T>`,`T`表示泛型类型。
在方法参数列表中可以使用`T`作为参数的类型,也可以使用`T`作为返回值的类型。
使用泛型方法的一个常见的场景是在集合类中的泛型类型参数的推断。
例如,我们可以定义一个泛型方法来计算集合中的最大元素:```javapublic static <T extends Comparable<T>> T getMax(List<T> list) {T max = list.get(0);for (int i = 1; i < list.size(); i++) {if (list.get(i).compareTo(max) > 0) {max = list.get(i);}}return max;}```在这个例子中,我们使用了一个类型参数`T`来表示集合中的元素类型。
`T`被限定为实现了`Comparable`接口的类型,这样我们就可以使用`compareTo()`方法来比较元素的大小。
在方法内部,我们先获取列表中的第一个元素作为初始的最大值,然后遍历列表中的其他元素,逐个比较并更新最大值。
通过泛型方法,我们可以在调用时指定实际类型的集合,而无需在方法中重复编写多个版本的代码。
例如,我们可以这样调用这个方法:```javaList<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int maxNumber = getMax(numbers);```这样就可以得到集合中的最大整数了。
实验七Java集合与泛型
一、实验目的
1)掌握集合的概念、体系结构、分类及使用场景
2)了解Set接口及主要实现类(HashSet、TreeSet)
3)了解List接口及主要实现类(ArrayList、LinkedList、Vector)
4)掌握ArrayList的使用
5)掌握ArrayList与Vector的区别
6)了解Map接口及主要实现类(HashMap、TreeMap、HashTable)
7)掌握HashMap的使用
8)掌握HashMap与HashTable的区别
二、实验环境
JDK1.6+Eclpise3.2
三、实验准备
1)复习课件中理论知识
2)练习课堂所讲的例子
四、实验内容
1、编写程序练习List集合的基本使用:
1) 创建一个只能容纳String对象名为names的ArrayList集合;
2)按顺序往集合中添加5个字符串对象:“张三”、“李四”、“王五”、“马六”、“赵七”;
3)对集合进行遍历,分别打印集合中的每个元素的位置与内容;
4)首先打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。
2、编写程序练习Map集合的基本使用:
1)创建一个只能值只能容纳String对象的person的HashMap集合;
2)往集合中添加5个“键-值”对象:id—>”1”、name—>”张三”、sex—>”男”、age—>”25”、love—>”爱学Java”
3)对集合进行遍历,分别打印集合中的每个元素的键与值;
4)首先打印集合的大小,然后删除集合中的键为age的元素,并显示删除元素的内容,并再次打印集合的大小。
五、验过程及结果
第1题调试结果如下图:
第2题调试结果如下图:
六、实验感想
本次实验掌握了集合的概念、体系结构、分类及使用场景,了解了Set接口及主要实现类(HashSet、TreeSet),了解了解List接口及主要实现类(ArrayList、LinkedList、Vector),掌握ArrayList的使用及其与Vector的区别,了解了Map接口及主要实现类(HashMap、TreeMap、HashTable),掌握了掌握HashMap的使用及与HashTable的区别等。
七、附录
第1题源码:
package zsl;
import java.util.ArrayList;
import java.util.List;
public class ListStudy {
public static void main (String[] args){
List<String> names=new ArrayList <String>();
System.out.println("下面是集合的所有元素:");
names.add("张三");
names.add("李四");
names.add("王五");
names.add("马六");
names.add("钱七");
for (int i=0;i<names.size();i++){
System.out.println("位置:"+i+"的元素内容为:"+names.get(i));
}
System.out.println("目前的集合大小为:"+names.size());
System.out.println("删除的第3个元素内容为:"+names.get(2));
names.remove(2);
System.out.println("删除操作后,集合的第3个元素内容为:
"+names.get(2));
System.out.println("删除操作后,集合的大小为"+names.size());
}
}
第2题源码:
package zsl;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry.Entry; public class MapStudy {
public static void main (String[] args){
Map<String,String> person=new HashMap<String,String>();
System.out.println("下面是集合的所有元素:");
person.put("id","1");
person.put("name","张三");
person.put("sex","男");
person.put("ade","25");
person.put("love","学习Java");
for(Iterator<java.util.Map.Entry<String, String>>
iter=person.entrySet().iterator();iter.hasNext();){
Map.Entry entry=(Map.Entry) iter.next();
System.out.println("键:"+entry.getKey()+"-->值
"+entry.getValue());
}
System.out.println("目前集合的大小为:"+person.size());
System.out.println("删除的键age的内容为:"+person.get("age"));
person.remove("age");
System.out.println("删除操作后,集合的大小为"+person.size());
}
}。