实验七:Java集合与泛型

合集下载

JAVA集合框架与泛型

JAVA集合框架与泛型

集合框架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。

跟我学Java泛型技术及应用实例——Java泛型技术在Java集合中的应用示例

跟我学Java泛型技术及应用实例——Java泛型技术在Java集合中的应用示例
3、采用泛型的集合元素示例 泛型规定了某个集合只能存放特定类型的属性,当添加类型与规定不一致时,编译器会
直接报错。而当我们从集合中取出成员元素时直接取出即可,不用进行类型转换,因为已经 规定了里面存放的只能是某种类型。
当然,在集合中除了可以存入定义的泛型类型的对象实例之外,也还可以存入泛型类型 子类的对象实例。
在 Java 语言中将集合设计为 泛型,如下示图为 JDK API 中的 Collection 集合接口的定 义:
增加了泛型支持后的 Java 集合,完全可以记住集合中各个成员元素的数据类型,并可以 在编译时检查集合中元素的类型。即解决一些安全问题;同时还可以让代码变得更加简洁。
杨教授工作室,版权所有,盗版必究, 1/10 页
杨教授工作室,版权所有,盗版必究, 3/10 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
则可以传递该接口的实现类。下面的示例是将 E 设置为 Number 类型: List<Number> numberList= new ArrayList<Number>(); numberList.add(2.0); numberList.add(2); 而下面的示例是将 E 设置为 String 类型:List<String> myList;那工作室 精心创作的优秀程序员 职业提升必读系列资料
2、不采用泛型的集合元素的应用示例 java.util.List oneList=new java.util.ArrayList(); oneList.add("1"); /** 在使用时通过强制类型转换获得正确的值 */ oneList.add(new Integer(2)); String oneElement=(String)oneList.get(0); /** 此时将会出现转换错误而产生异常抛出 */ System.out.println("不采用泛型的集合元素:"+oneElement); String twoElement=(String)oneList.get(1); System.out.println("不采用泛型的集合元素:"+twoElement);

Java集合泛型

Java集合泛型

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程序设计基础第八章 集合和泛型

Java程序设计基础第八章 集合和泛型

8.1 集合类(续)
Map的实现类有HashMap、 IdentityHashMap、WeakHashMap、 TreeMap,以及LinkedHashMap子类,这 些类都是非线程安全的,WeakHashMap是一 种改进的HashMap,如果一个key不再被外部 所引用,那么该key可以被GC回收。 HashTable是线程安全的,HashTable不能 插入null空元素。
8.1 集合类(续)
TreeSet将元素存储在树中,但元素按有序方式 存储,可以按任何次序向TreeSet中添加元素, 但遍历TreeSet时,元素出现的序列是有序的。 在TreeSet中插入元素的效率要低于在 HashSet中插入元素,但比把元素插入到数组 或链表的合适位置要快。 SortedSet接口用于按照排好顺序元素的集合, 排序方式可以是元素的自然顺序(如数字按升序 排列),也可以是由Comparator指定的顺序
8.1 集合类(续)
在ArrayList的前面或中间插入数据时,必须将 其后的所有数据相应的后移,花费较多时间,所 以,当程序添加元素主要是在后面,并且需要随 机地访问其中的元素时,优先使用ArrayList会 得到比较好的性能。 访问LinkedList中的某个元素时,就必须从链 表的一端开始沿着连接方向一个一个元素地去查 找,直到找到所需的元素为止,但在添加元素到 原有元素中间时效率很高,所以,当程序需要经 常在指定位置添加元素,并且按照顺序访问其中 的元素时,优先使用LinkedList。
8.1 集合类(续)
集合是一种可以快速找到已存在元素的数据结构 ,但通常进行元素查找时,是通过某些关键信息 来查找与之相关的对象,映射类是解决此类问题 的数据结构之一。映射类储存的数据是“键/值” 对,将“键”与“值”关联起来,给出键就可以查找 到与之相关的值。

Java集合和泛型

Java集合和泛型

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实验报告——异常、集合类和泛型

java实验报告——异常、集合类和泛型
Stu[12]=new XueShengXinXi(" 电 信 ", " 电 信 10-2", " 李 雨 ", " 女 ", "6314", "43ghffvvdfnhjbh");
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");

Java集合:Collection、List、Set、Map、泛型

Java集合:Collection、List、Set、Map、泛型

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集合泛型

java集合泛型

Set
简介


虽然Set同List的实现方式大不一样。List基本上都是以Array为基 础。但是Set则是在HashMap的基础上来实现的,这个就是Set和 List的根本区别。 Set集合中的对象不按特定的方式排序,并且没有重复对象 Iterator it=set.iterator(); while(it.hasNext()) { String oldStr=it.next(); }
泛型代码和虚拟机
虚拟机中没有泛型,只有普通的类和方法。 所有的类型参数都用它们的边界替换。 桥方法被合成为保持多态的。 为保持类型安全性,必要时插入强制类型转换
约束与局限性
不能等同于基本类型

不能用类型参数替换基本类型。 不能实例化泛型类型。但是,可以通过调用Class.newInstance和 Array.newInstance方法,利用反射构造泛型对象和数组。
泛型应用
原始处理

在Java 5之前,为了让类有通用性,往往将参数类型、 返回类型设置为Object类型,当获取这些返回类型来使 用时候,必须将其“强制”转换为原有的类型或者接 口,然后才可以调用对象上的方法 可以使用<T>来声明一个类型持有者名称,然后就可以 把T当作一个类型代表来声明成员、参数和返回值类型 ; 还可以定义泛型接口,泛型方法;
List总结
所有的List中只能容纳单个不同类型的对象组成的表,而 不是Key-Value键值对。例如:[ tom,1,c ]; 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]; 所有的List中可以有null元素,例如[ tom,null,1 ]; 基于Array的List(Vector,ArrayList)适合查询,而 LinkedList(链表)适合添加,删除操作。 就LinkedList.add方法用于将对象添加到列表的尾部,但 是如果希望能够添加到中间位置,则需要使用迭代器。但 只有对有序的集合使用迭代器添加元素才有意义
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七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());
}
}。

相关文档
最新文档