
Java面向对象思想与程序设计-第8章-集合类.pptx
60页8 8集 合 类第章Java程序设计8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS8.1.1 什么是泛型泛型,也称之为“参数化类型”,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)8.1.1 什么是泛型【例8.1】假设有一个篮子(Basket),我们可以用它存放不同的物品,如放鸡蛋(Egg),放面包(Bread),当然也可以放钱(Money)等等如何定义这个Basket类来满足存放不同种类物品的需求呢?【分析】在定义这个类时,需要解决这样一个问题:放入篮子的这些物品对象存放在哪?我们可以通过数组来存放这些对象;这样引出了下一个问题:数组类型如何定义可以满足存放不同类型的物品?我们可以用所有类型的父类Object来进行定义Example8_01.java8.1.2 泛型类的定义泛型类是带有类型参数的类,类中也有属性和方法泛型类的定义形式:class 泛型类名/类体泛型类型参数:T:代表这是一个类型TypeE:代表这是一个元素ElementK:代表这是一个键KeyV:代表这是一个值Value8.1.2 泛型类的定义定义泛型类的对象:泛型类名 对象名=new 泛型类名(形参表);或泛型类名 对象名=new 泛型类名(形参表);也可以用“?”代替“实际参数表列”如:Basket basket=new Basket();【例8.2】定义一个泛型篮子类,并创建相关的对象。
Example8_02.java 8.1.2 泛型类的定义 泛型的使用规则:泛型的类型参数只能是类类型,而不能是简单类型泛型的类型参数可以有多个静态字段的类型不能是类型参数不能直接创建类型参数变量的数组,只能通过反射创建泛型的参数类型可以使用extends和super关键字泛型的参数类型还可以是通配符类型8.1.3 泛型接口的定义除了可以定义泛型类外,还可以定义泛型接口泛型接口定义形式:interface 接口名/8.1.3 泛型接口的定义在实现接口时,也应该声明与接口相同的类型参数实现形式如下:class 类名 implements 接口名/8.1.4 泛型方法的定义1.泛型方法访问限定词 static 方法类型 方法名(参数表列)/方法也可以是泛型方法,泛型方法可以定义在泛型类中,也可以定义在非泛型类中泛型方法定义形式:8.1.4 泛型方法的定义2.具有可变参数的方法System.out.printf(“%d,%fn”,i,f);System.out.printf(“x=%d,y=%d,z=%d”,x,y,z);printf是具有可变参数的方法利用泛型方法,可以定义具有可变参数的方法,如printf方法:8.1.4 泛型方法的定义访问限定词 方法类型 方法名(类型参数名 参数名)/【例8.3】具有可变参数的方法的定义与使用。
Example8_03.java2.具有可变参数的方法8.1.5 泛型参数的限定如果只接收指定范围内的类类型,可以对泛型的参数进行限定参数限定的语法形式:类型形式参数 extends 父类“类型形式参数”是指声明泛型类时所声明的类型,“父类”表示只有这个类下面的子类才可以做实际类型例8.4】定义一个泛型类,能够找出多个数据中的最大数和最小数Example8_04.java8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS8.2.1 集合类及其特点集合类的特点:空间自主调整,提高空间利用率提供不同的数据结构和算法,减少编程工作量提高程序的处理速度和质量注意:集合类不支持简单数据类型的存放和处理如果确实需要存储简单类型数据可以先进行类的封装(装箱)处理集合类中存放的是对象的引用,而不是对象本身8.2.2 Java的集合类CollectionListSetArrayListLinkedListHashSetTreeSetMapHashMapTreeMapVectorStack8.2.2 Java的集合类Java的集合类主要继承了Map接口和Collection接口。
其中在Collection接口中定义了大多数集合类支持的方法下面给出Collection接口的部分方法返回类型方法名方法功能booleanadd(E e)向集合中添加新元素booleanaddAll(Collection c)将指定集合中的所有元素添加到当前集合中booleanremove(Object o)删除当前集合中包含的指定元素booleanremoveAll(Collection c)删除当前集合中与指定集合相同的所有元素booleanretainAll(Collection c)保留当前集合中与指定集合相同的所有元素voidclear()删除当前集合中的所有元素booleancontains(Object o)查找当前集合中是否有指定元素booleancontainsAll(Collection c)查找当前集合中是否包含指定集合中的所有元素booleanisEmpty()当前集合是否为空intsize()返回当前集合的元素个数Iteratoriterator()返回一个可遍历当前集合的迭代器Streamstream()返回一个连接集合的顺序流ObjecttoArray()返回一个当前集合所有元素的数组8.2.2 Java的集合类Java中实现Collection接口的类,主要包括List集合接口和Set集合接口。
List是一个有序元素集合,允许出现重复元素Set是一个无序集合,不允许出现重复元素Map是Java.util包中的另一个接口,Map集合中的每个元素都由一个键-值对构成在Map中不能有重复的键,但是可以有相同的值集合类均采用泛型进行定义8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS8.3.1 List接口List集合接口,也称之为线性表,是一个有序列表集合中的元素是按顺序进行存放和处理的,可以像访问数组元素一样通过序号访问和处理List集合元素List集合重点关注的是索引而不是元素本身,集合中允许出现重复元素实现List集合接口的常用类有ArrayList、LinkedList、Vector和Stack8.3.1 List接口表8.2 List接口中的主要方法类型方法名方法功能booleanadd(Ee)把元素e加到表的尾部voidadd(intindex,Ee)把元素e加到表的index位置,原index位置元素顺序后移booleanequals(Objecto)比较对象o是否与表中的元素是同一元素Eget(intindex)得到表中index位置的元素booleanindexOf(Objecto)判断元素o在表中是否存在。
如果不存在,则返回-1Iteratoriterator()获得表的遍历器 List接口的定义形式:public interface List extends Collection8.3.2 ArrayList集合类ArrayList是一种具有可变大小的动态数组结构,ArrayList类的定义形式:public class ArrayList extends AbstractListimplements List,RandomAccess,Cloneable,Serializable 8.3.2 ArrayList集合类表8.3 ArrayList类的构造方法【例8.5】已知一个人员名单,将每个名字前面添加一个序号Example8_05.java方法名方法功能ArrayList()构造一个初始容量为10的空列表ArrayList(Collectionc)构造一个包含指定collection的元素的列表ArrayList(intcapacity)构造一个具有指定初始容量的空列表8.3.3 LinkedList集合类LinkedList集合类是另一个常用的线性列表集合,采用的是双向链表结构LinkedList类的定义形式:public class LinkedListextends AbstractSequentialList implements List,Deque,Cloneable,Serializable8.3.3 LinkedList集合类LinkedList实现了两个接口:List和Deque接口,List接口中定义了线性表操作方法,Deque接口中定义了线性数列从队列两端访问元素的方法。
LinkedList对象既可以表示线性序列表,也可以把它当做堆栈使用,还可以把它当做队列使用8.3.3 LinkedList集合类返回类型方法名方法功能booleanadd(Ee)将元素e加到列表的末尾voidadd(intindex,Eelement)把元素e插入到列表index所指位置,原位置元素顺序后移voidaddFirst(Ee)将元素e插入到列表的头部EgetFirst()返回列表的头部元素intindexOf(Objecto)返回元素o在列表中第1次出现的位置如果无元素o,则返回-1booleanofferFirst(Ee)将元素e插入到列表的头部EpollLast()返回列表中尾部元素并且从表中删除该元素如果表空,则返回nullEpop()栈顶元素出栈voidpush(Ee)元素e入栈EremoveFirst()从列表中删除头部元素并返回该元素LinkedList类的部分方法【例8.6】求小于某个正整数的所有素数Example8_06.java8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTSSet接口的定义形式:public interface Set extends CollectionSet实现了Collection接口定义的所有操作。
Set还能利用相关方法实现数学上的集合运算,如交集、并集、差集8.4.1 Set接口表8.5 常用的集合运算方法说明集合运算对应方法实现功能并集addAll(Collectionc)得到两个集合的并集,结果保存到当前集合中交集retainAll(Collectionc)得到两个集合的交集,结果保存到当前集合中差集removeAll(Collectionc)得到两个集合的差集,结果保存到当前集合中超集containsAll(Collectionc)当前集合是否包含集合c的所有元素,是返回true8.4.2 HashSet集合类HashSet的定义形式:public class HashSetextends AbstractSetimplements Set,Cloneable,Serializable该类实现了Set接口,为用户提供快速查找和添加元素功能8.4.2 HashSet集合类说明:使用构造方法创建空HashSet,会预先分配一些元素空间,默认是16个元素构造方法中的加载因子是指当空间利用率达到这个因子时就需要进行扩容了HashSet存储每个元素时会生成一个唯一的整数标识散列码(hash code。
HashSet根据这个标识来决定元素所在的存储位置缺点:保存的元素无任何特定的顺序8.4.2 HashSet集合类返回类型方法名方法功能HashSet()构造一个新的空set,初始容量是16,加载因子是0.75HashSet(Collectionc)构造一个包含指定collection中的元素的新setHashSet(intCapacity)构造一个新的空set,指定初始容量和默认的加载因子(0.75)HashSet。
