Java面向对象思想与程序设计-第8章-集合类.pptx

上传人(卖家):三亚风情 文档编号:3372427 上传时间:2022-08-24 格式:PPTX 页数:60 大小:490.86KB
下载 相关 举报
Java面向对象思想与程序设计-第8章-集合类.pptx_第1页
第1页 / 共60页
Java面向对象思想与程序设计-第8章-集合类.pptx_第2页
第2页 / 共60页
Java面向对象思想与程序设计-第8章-集合类.pptx_第3页
第3页 / 共60页
Java面向对象思想与程序设计-第8章-集合类.pptx_第4页
第4页 / 共60页
Java面向对象思想与程序设计-第8章-集合类.pptx_第5页
第5页 / 共60页
点击查看更多>>
资源描述

1、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类来满足存放不同种类物品

2、的需求呢?【分析】在定义这个类时,需要解决这样一个问题:放入篮子的这些物品对象存放在哪?我们可以通过数组来存放这些对象;这样引出了下一个问题:数组类型如何定义可以满足存放不同类型的物品?我们可以用所有类型的父类Object来进行定义。Example8_01.java8.1.2 泛型类的定义泛型类是带有类型参数的类,类中也有属性和方法。泛型类的定义形式:class 泛型类名/类体泛型类型参数:T:代表这是一个类型TypeE:代表这是一个元素ElementK:代表这是一个键KeyV:代表这是一个值Value8.1.2 泛型类的定义定义泛型类的对象:泛型类名 对象名=new 泛型类名(形参表);或泛

3、型类名 对象名=new 泛型类名(形参表);也可以用“?”代替“实际参数表列”如:Basket basket=new Basket();【例8.2】定义一个泛型篮子类,并创建相关的对象。Example8_02.java 8.1.2 泛型类的定义 泛型的使用规则:泛型的类型参数只能是类类型,而不能是简单类型。泛型的类型参数可以有多个。静态字段的类型不能是类型参数。不能直接创建类型参数变量的数组,只能通过反射创建。泛型的参数类型可以使用extends和super关键字。泛型的参数类型还可以是通配符类型。8.1.3 泛型接口的定义除了可以定义泛型类外,还可以定义泛型接口。泛型接口定义形式:inter

4、face 接口名/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是具有可变参数的方法。利用泛型方法,可以定义具有可变参

5、数的方法,如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

6、泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS8.2.1 集合类及其特点集合类的特点:空间自主调整,提高空间利用率。提供不同的数据结构和算法,减少编程工作量。提高程序的处理速度和质量。注意:集合类不支持简单数据类型的存放和处理。如果确实需要存储简单类型数据可以先进行类的封装(装箱)处理。集合类中存放的是对象的引用,而不是对象本身。8.2.2 Java的集合类CollectionListSetArrayListLinkedListHashSetTreeSetMapHashMapTreeMapVectorStack8.2.2 Java的集合类Java的集合类主要继承了

7、Map接口和Collection接口。其中在Collection接口中定义了大多数集合类支持的方法。下面给出Collection接口的部分方法。返回类型方法名方法功能booleanadd(E e)向集合中添加新元素booleanaddAll(Collection c)将指定集合中的所有元素添加到当前集合中。booleanremove(Object o)删除当前集合中包含的指定元素booleanremoveAll(Collection c)删除当前集合中与指定集合相同的所有元素booleanretainAll(Collection c)保留当前集合中与指定集合相同的所有元素voidclear()

8、删除当前集合中的所有元素booleancontains(Object o)查找当前集合中是否有指定元素booleancontainsAll(Collection c)查找当前集合中是否包含指定集合中的所有元素booleanisEmpty()当前集合是否为空intsize()返回当前集合的元素个数Iteratoriterator()返回一个可遍历当前集合的迭代器Streamstream()返回一个连接集合的顺序流ObjecttoArray()返回一个当前集合所有元素的数组8.2.2 Java的集合类Java中实现Collection接口的类,主要包括List集合接口和Set集合接口。List是一

9、个有序元素集合,允许出现重复元素。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集合重点关注的是索引而不是元素本身,集合中允许

10、出现重复元素。实现List集合接口的常用类有ArrayList、LinkedList、Vector和Stack。8.3.1 List接口表8.2 List接口中的主要方法类型方法名方法功能booleanadd(E e)把元素e加到表的尾部voidadd(int index,E e)把元素e加到表的index位置,原index位置元素顺序后移booleanequals(Object o)比较对象o是否与表中的元素是同一元素Eget(int index)得到表中index位置的元素booleanindexOf(Object o)判断元素o在表中是否存在。如果不存在,则返回-1Iteratorite

11、rator()获得表的遍历器 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

12、.java方法名方法功能ArrayList()构造一个初始容量为 10 的空列表。ArrayList(Collectionc)构造一个包含指定 collection 的元素的列表。ArrayList(intcapacity)构造一个具有指定初始容量的空列表。8.3.3 LinkedList集合类LinkedList集合类是另一个常用的线性列表集合,采用的是双向链表结构。LinkedList类的定义形式:public class LinkedListextends AbstractSequentialList implements List,Deque,Cloneable,Serializabl

13、e8.3.3 LinkedList集合类LinkedList实现了两个接口:List和Deque接口,List接口中定义了线性表操作方法,Deque接口中定义了线性数列从队列两端访问元素的方法。LinkedList对象既可以表示线性序列表,也可以把它当做堆栈使用,还可以把它当做队列使用。8.3.3 LinkedList集合类返回类型方法名 方法功能booleanadd(E e)将元素e加到列表的末尾voidadd(int index,E element)把元素e插入到列表index所指位置,原位置元素顺序后移voidaddFirst(E e)将元素e插入到列表的头部EgetFirst()返回列

14、表的头部元素intindexOf(Object o)返回元素o在列表中第1次出现的位置。如果无元素o,则返回-1booleanofferFirst(E e)将元素e插入到列表的头部EpollLast()返回列表中尾部元素并且从表中删除该元素。如果表空,则返回nullEpop()栈顶元素出栈voidpush(E e)元素e入栈EremoveFirst()从列表中删除头部元素并返回该元素LinkedList类的部分方法【例8.6】求小于某个正整数的所有素数。Example8_06.java8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8

15、.7 小结C目录ONTENTSSet接口的定义形式:public interface Set extends CollectionSet实现了Collection接口定义的所有操作。Set还能利用相关方法实现数学上的集合运算,如交集、并集、差集8.4.1 Set接口表8.5 常用的集合运算方法说明集合运算对应方法实现功能并集addAll(Collection c)得到两个集合的并集,结果保存到当前集合中交集retainAll(Collection c)得到两个集合的交集,结果保存到当前集合中差集removeAll(Collection c)得到两个集合的差集,结果保存到当前集合中超集conta

16、insAll(Collection c)当前集合是否包含集合c的所有元素,是返回true8.4.2 HashSet集合类HashSet的定义形式:public class HashSetextends AbstractSetimplements Set,Cloneable,Serializable该类实现了Set接口,为用户提供快速查找和添加元素功能。8.4.2 HashSet集合类说明:使用构造方法创建空HashSet,会预先分配一些元素空间,默认是16个元素。构造方法中的加载因子是指当空间利用率达到这个因子时就需要进行扩容了。HashSet存储每个元素时会生成一个唯一的整数标识散列码(ha

17、sh code。HashSet根据这个标识来决定元素所在的存储位置。缺点:保存的元素无任何特定的顺序。8.4.2 HashSet集合类返回类型方法名方法功能HashSet()构造一个新的空 set,初始容量是 16,加载因子是 0.75。HashSet(Collection c)构造一个包含指定 collection 中的元素的新 set。HashSet(int Capacity)构造一个新的空 set,指定初始容量和默认的加载因子(0.75)。HashSet(int Capacity,float loadFactor)构造一个新的空 set,指定初始容量和加载因子。booleanadd(E

18、e)如果set 中没有元素e,则添加。voidclear()删除set中所有元素。Objectclone()返回此 HashSet 实例的副本,但并不复制这些元素本身。booleancontains(Object o)查询set中是否包含指定元素obooleanisEmpty()判断set中是否没有任何元素。Iterator iterator()返回set中元素进行迭代的迭代器。booleanremove(Object o)删除set中的指定元素ointsize()返回set中的元素的数量(set的容量)。表8.6 HashSet的主要方法8.4.3 TreeSet集合类、TreeSet类的定

19、义形式:public class TreeSetextends AbstractSetimplements NavigableSet,Cloneable,Serializable说明:TreeSet内部采用了二叉搜索树的数据结构进行元素的存储,实现了元素的有序存放。TreeSet适合按顺序遍历。使用TreeSet类的前提条件:存储的元素类型必须是可排序的。8.4.3 TreeSet集合类返回类型方法名方法功能TreeSet()构造一个新的空TreeSet,根据元素的自然顺序进行排序。TreeSet(Collection c)构造一个包含指定 Collection 元素的新 TreeSet,按照

20、元素的自然顺序进行排序。表8.7 TreeSet的构造方法8.4.3 TreeSet集合类返回类型方法名方法功能Comparator comparator()返回对此 set 中的元素进行排序的比较器。Iterator iterator()返回元素按升序进行迭代的迭代器。Iterator descendingIterator()返回元素按降序进行迭代的迭代器。Efirst()返回第一个元素。Elast()返回最后一个元素。Eceiling(E e)返回大于等于给定元素的最小元素;如果不存在,则返回 null。Efloor(E e)返回小于等于给定元素的最大元素;如果不存在,则返回 null。E

21、lower(E e)返回小于给定元素的最大元素;如果不存在,则返回 null。Ehigher(E e)返回大于给定元素的最小元素;如果不存在,则返回 null。表8.8 TreeSet类的部分方法【例8.7】班级学生报名参加校运动会,已知各项比赛的报名人员,请统计班级参加比赛的人数。Example8_07.java8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS8.5.1 Map 接口Map接口是实现映射集合的根接口,其定义了关于映射集合的相关操作方法。返回类型方法名方法功能voidclear()删除集

22、合中的所有元素booleancontainsKey(Object key)查询集合中是否存在指定的key键booleancontainsValue(Object value)查询集合中是否存在指定的value值SetMap.Entry entrySet()返回集合中包含的所有键值对的Set集合视图。booleanequals(Object o)比较指定的对象与此集合对象是否相等。Vget(Object key)返回指定键所映射的值;如果键不存在则返回 null。表8.9 Map接口的常用方法8.5.1 Map 接口返回类型方法名方法功能booleanisEmpty()查询集合是否为空。Setk

23、eySet()返回集合中包含的所有键的Set集合视图。Vput(K key,V value)添加一个键值对,如果存在该键,则替换原有的值。voidputAll(Map m)将集合m中所有键值对复制到当前集合中。Vremove(Object key)删除指定键可以的键值对。intsize()返回集合中的键值对个数。Collectionvalues()返回集合中包含的所有值的集合视图。续表8.5.2 HashMap集合类HashMap类的定义形式:public class HashMapextends AbstractMapimplements Map,Cloneable,Serializable

24、8.5.2 HashMap集合类方法名方法功能HashMap()构造一个具有默认初始容量(16)和默认加载因子(0.75)的空 HashMap。HashMap(int Capacity)构造一个带指定初始容量和默认加载因子(0.75)的空 HashMap。HashMap(int Cap,float f)构造一个带指定初始容量和加载因子的空 HashMap。HashMap(Map m)构造一个映射关系与指定 Map 相同的新 HashMap。表8.10 HashMap的构造方法【例8.8】创建一个电话簿,并查询“zhangsan”的电话号码是多少。Example8_08.java8.5.3 Tr

25、eeMap集合类TreeMap集合类的定义形式:public class TreeMapextends AbstractMapimplements NavigableMap,Cloneable,Serializable该集合类根据键的自然顺序进行排序,或者根据构造集合对象时提供的 Comparator 进行排序。TreeMap类是对基于红黑树(Red-Black tree)的NavigableMap接口的具体实现。8.5.3 TreeMap集合类方法名方法功能TreeMap()构造一个新的、空的集合。TreeMap(Comparator c)构造一个新的、空的集合,集合的排序方式由给定的比较器

26、决定。TreeMap(Map m)构造一个与给定m相同的自然排序的新集合。TreeMap(SortedMap m)构造一个与指定有序集合m相同的新的集合。表8.11 TreeMap类的构造方法8.5.3 TreeMap集合类返回类型方法名方法功能 Map.EntryceilingEntry(K key)返回一个不小于给定键的最小键值对;如不存在,则返回 null。KceilingKey(K key)返回一个大于等于给定键的最小键;如不存在,则返回 null。NavigableSetdescendingKeySet()返回此集合中所有键的逆序集合视图。Map.EntryfirstEntry()返

27、回此集合中最小键的键值对;如果集合为空,则返回 null。KfirstKey()返回此集合中第一个(最小)键。Vget(Object key)返回指定键所映射的值,如不存在,则返回 null。SetkeySet()返回此集合中所有键的Set视图。Map.EntrylastEntry()返回此集合中的最大键的键值对;如果为空,则返回 null。Map.EntrypollFirstEntry()移除并返回与此集合中的最小键的键-值对;如果为空,则返回 null。表8.12 TreeMap类的常用方法【例8.9】将例8.8的电话簿按姓名排序输出。Example8_09.java8.2 集合类总览8.

28、3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS8.6.1 使用Iterator迭代器Iterator,称为迭代器,是一种允许用户以顺序方式高效访问集合元素的一种特殊对象。使用迭代器可以简化遍历集合元素的过程。Java定义了Iterator接口,描述了在遍历元素时所需要使用的方法。而具体Iterator接口的实现则由各集合类根据自身结构特点来完成。8.6.1 使用Iterator迭代器Iterator接口只提供了三个方法:hasNext()方法,next()方法和remove()方法。hasNext()方法判断是否遍历到集合

29、的最后一个元素;next()方法返回迭代器指向的下一个元素;remove()方法删除迭代器当前返回的元素。Java提供的ListIterator接口扩展了Iterator接口的功能,定义了逆向遍历的方法,实现List接口的类均实现了ListIterator迭代器。【例8.10】删除数组中长度为偶数的字符串。Example8_10.java8.6.2 使用CollectionsCollections类与Collection接口的区别:Collection接口是一类集合的根接口,提供对这类集合中的元素进行基本操作的通用方法。Collections类是具体的实现类,为实现Collection接口的集

30、合提供了一系列静态方法,完成元素的处理,如排序、查找、特定变换等操作。Collections类是Java为方便进行Collection集合的操作和处理所提供的类。8.6.2 使用Collections返回类型方法名方法功能static intbinarySearch(List list,T key)使用二分搜索法搜索列表,返回key所在的位置。static voidcopy(List dest,List src)将所有元素从列表src复制到列表dest。static voidfill(List list,T obj)使用元素obj替换列表list中的所有元素。static Tmax(Colle

31、ction coll)按自然顺序,返回集合coll的最大元素。static Tmax(Collection coll,Comparator comp)按指定比较器comp产生的顺序,返回集合coll的最大元素。表 8.13 Collections类常用方法8.6.2 使用Collections返回类型方法名方法功能static Tmin(Collection coll)按元素的自然顺序 返回集合coll的最小元素。static boolean replaceAll(List list,T oldVal,T newVal)使用元素newVal替换列表中出现的所有oldVal元素。static v

32、oidreverse(List list)反转列表list中元素的顺序。static voidsort(List list)按元素的自然顺序对列表list按升序进行排序。static voidsort(List list,Comparator c)按指定比较器产生的顺序对列表list进行排序。static voidswap(List list,int i,int j)将列表list中第i位置和第j位置的元素进行互换。续表【例8.11】有一个学生点名册,要求按学号进行排序。Example8_11.java8.6.3 使用Lambda表达式Lambda表达式是Java 1.8中新增的一种特性。La

33、mbda表达式用更少的代码实现同样的功能。代码更简洁紧凑,支持大集合的并行操作。Java 1.8新增了java.util.stream和java.util.function两个包用于扩展集合的操作。8.6.3 使用Lambda表达式stream可以在集合上建立一个管道流,进入流的集合元素可以进行一些中间操作,如对元素进行条件过滤。条件的给定就要使用function包中的类完成;最后可以对符合条件的元素进行相关处理,如字符转换,数据计算等。Lambda表达式配合这两个包的应用,大大增强了对集合的处理能力。8.6.3 使用Lambda表达式1.Lambda表达式Lambda语法格式:(parame

34、ters)-expression 或者(parameters)-statements;Lambda表达式由三部分组成:parameters:形参列表。-:表示为“被用于”。方法体:可以是表达式也可以是代码块,实现函数接口中的方法。方法体可以有返回值也可以没有返回值。8.6.3 使用Lambda表达式1.Lambda表达式几个简单示例:()-1没有参数,直接返回1;(int x,int y)-x+y有两个int类型的参数,返回这两个参数的和;(x,y)-x+y有两个参数,JVM根据上下文推断参数的类型,返回两个参数的和;(String name,String number)-System.out

35、.println(name);System.out.println(number)有两个String类型参数,分别进行输出,没有返回值;x-2*x有一个参数,返回它本身的2倍。8.6.3 使用Lambda表达式2.stream流stream表示数据流,流本身并不存储元素,在流中的操作也不会改变源数据,而是生成新Stream。在数据流中,可以对数据做多次处理和操作。stream既支持串行也支持并行。8.6.3 使用Lambda表达式返回类型方法名方法功能static Streamconcat(Stream a,Stream b)创建一个流,其元素是a后跟b的所有元素。longcount()返回此

36、流中的元素数。Streamdistinct()返回由该流的不同元素组成的流。static Streamempty()返回一个空的顺序流。表8.14 stream接口的常用方法8.6.3 使用Lambda表达式返回类型方法名方法功能Streamfilter(Predicate p)返回一个符合匹配条件的流。voidforEach(Consumer action)对流的每个元素执行操作。Streamlimit(long maxSize)返回长度不超过 maxSize的子流。Streammap(Function mapper)返回该流元素执行函数后的结果组成的流。Streamskip(long n)

37、丢弃首个 n元素后,返回由该流的 n元素组成的流。续表例8.12:将集合中所有长度不小于4的字符串转换成大写字符后输出。Example8_12.java综合应用举例编程实现圆圈报数游戏。有n个人围坐一圈,从第m个人开始报数,每报到数字k或k的倍数,这个人被淘汰。求最后的胜利者是谁。【分析】该题目的实现可以有多种方法,一种是直接按照题意,将人员信息放到数组中,每个人员记录姓名,所在位置和当前状态,初始状态均为真,即都参与报数游戏。从指定的第m个人开始计数,当计数值为k时,则将该人的状态改为假,即退出报数游戏。直到剩余1人完成报数游戏,最后输出该人的位置和姓名。综合应用举例我们还可以采用另一种方法

38、,即利用动态数组存放人员信息。每报数到k时,将当前报数人从动态数组中移出,直到只剩一个人为止。方法1:Example8_13.java方法2:Example8_13_2.java8.2 集合类总览8.3 List集合8.4 Set集合8.1 泛型8.5 Map集合8.6 集合元素的操作8.7 小结C目录ONTENTS小结Summary本章首先讲述了集合类中用到的一种类型:泛型,利用泛型可以让集合很容易实现不同类型对象的存储。接着,对Java的集合类进行了一个总览性的介绍,用于了解Java的集合类及其不同特点。然后,详细讲解了Java的三个主要集合:List集合,Set集合,Map集合。这些集合的存储结构各不相同,在使用上有各自不同的特点,因此通过案例对这些集合类的定义和使用方法进行了详细分析和介绍。最后,集中介绍了对元素进行遍历和访问的几种不同方法,便于用户根据实际应用选择相应的方法进行数据操作。谢谢观赏Java程序设计

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Java面向对象思想与程序设计-第8章-集合类.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|