![Java面向对象思想与程序设计-第8章-集合类_第1页](http://file4.renrendoc.com/view/c49937b38e2a28c955e308dbebdf3c4b/c49937b38e2a28c955e308dbebdf3c4b1.gif)
![Java面向对象思想与程序设计-第8章-集合类_第2页](http://file4.renrendoc.com/view/c49937b38e2a28c955e308dbebdf3c4b/c49937b38e2a28c955e308dbebdf3c4b2.gif)
![Java面向对象思想与程序设计-第8章-集合类_第3页](http://file4.renrendoc.com/view/c49937b38e2a28c955e308dbebdf3c4b/c49937b38e2a28c955e308dbebdf3c4b3.gif)
![Java面向对象思想与程序设计-第8章-集合类_第4页](http://file4.renrendoc.com/view/c49937b38e2a28c955e308dbebdf3c4b/c49937b38e2a28c955e308dbebdf3c4b4.gif)
![Java面向对象思想与程序设计-第8章-集合类_第5页](http://file4.renrendoc.com/view/c49937b38e2a28c955e308dbebdf3c4b/c49937b38e2a28c955e308dbebdf3c4b5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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 泛型接口的定义除了可以定义泛型类外,还可以定义泛型接口。泛型接口定义形式:inte
4、rface 接口名/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集合
6、8.1 泛型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)保留当前集合中与指定集合相同的所有元素voidcle
8、ar()删除当前集合中的所有元素booleancontains(Object o)查找当前集合中是否有指定元素booleancontainsAll(Collection c)查找当前集合中是否包含指定集合中的所有元素booleanisEmpty()当前集合是否为空intsize()返回当前集合的元素个数Iteratoriterator()返回一个可遍历当前集合的迭代器Streamstream()返回一个连接集合的顺序流ObjecttoArray()返回一个当前集合所有元素的数组8.2.2 Java的集合类Java中实现Collection接口的类,主要包括List集合接口和Set集合接口。Li
9、st是一个有序元素集合,允许出现重复元素。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(intindex, Ee)把元素e加到表的index位置,原index位置元素顺序后移booleanequals(Objecto)比较对象o是否与表中的元素是同一元素Eget(intindex)得到表中index位置的元素booleanindexOf(Object o)判断元素o在表中是否存在。如果不存在,则返回-1Iteratori
11、terator()获得表的遍历器 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】已知一个人员名单,将每个名字前面添加一个序号。 Examp
12、le8_05.java方法名方法功能ArrayList()构造一个初始容量为 10 的空列表。ArrayList(Collectionc)构造一个包含指定 collection 的元素的列表。ArrayList(intcapacity)构造一个具有指定初始容量的空列表。8.3.3 LinkedList集合类LinkedList集合类是另一个常用的线性列表集合,采用的是双向链表结构。LinkedList类的定义形式:public class LinkedListextends AbstractSequentialList implements List, Deque, Cloneable, Se
13、rializable8.3.3 LinkedList集合类LinkedList实现了两个接口:List和Deque接口,List接口中定义了线性表操作方法,Deque接口中定义了线性数列从队列两端访问元素的方法。LinkedList对象既可以表示线性序列表,也可以把它当做堆栈使用,还可以把它当做队列使用。8.3.3 LinkedList集合类返回类型方法名 方法功能booleanadd(E e)将元素e加到列表的末尾voidadd(intindex, Eelement)把元素e插入到列表index所指位置,原位置元素顺序后移voidaddFirst(Ee)将元素e插入到列表的头部EgetFir
14、st()返回列表的头部元素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 集合元
15、素的操作8.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)得到两个集合的差集,结果保存到当前集合中超集
16、containsAll(Collection c)当前集合是否包含集合c的所有元素,是返回true8.4.2 HashSet集合类HashSet的定义形式:public class HashSetextends AbstractSetimplements Set, Cloneable, Serializable该类实现了Set接口,为用户提供快速查找和添加元素功能。 8.4.2 HashSet集合类说明:使用构造方法创建空HashSet,会预先分配一些元素空间,默认是16个元素。构造方法中的加载因子是指当空间利用率达到这个因子时就需要进行扩容了。HashSet存储每个元素时会生成一个唯一的整数
17、标识散列码(hash 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,指定初始容量和加载因子。bool
18、eanadd(E e) 如果set 中没有元素e,则添加。voidclear()删除set中所有元素。Objectclone()返回此 HashSet 实例的副本,但并不复制这些元素本身。booleancontains(Object o)查询set中是否包含指定元素obooleanisEmpty()判断set中是否没有任何元素。Iteratoriterator()返回set中元素进行迭代的迭代器。booleanremove(Object o)删除set中的指定元素ointsize()返回set中的元素的数量(set的容量)。表8.6 HashSet的主要方法8.4.3 TreeSet集合类、T
19、reeSet类的定义形式:public class TreeSetextends AbstractSetimplements NavigableSet, Cloneable, Serializable说明:TreeSet内部采用了二叉搜索树的数据结构进行元素的存储,实现了元素的有序存放。TreeSet适合按顺序遍历。使用TreeSet类的前提条件:存储的元素类型必须是可排序的。8.4.3 TreeSet集合类返回类型方法名方法功能TreeSet() 构造一个新的空TreeSet,根据元素的自然顺序进行排序。TreeSet(Collection c) 构造一个包含指定 Collection 元素
20、的新 TreeSet,按照元素的自然顺序进行排序。表8.7 TreeSet的构造方法8.4.3 TreeSet集合类返回类型方法名方法功能Comparatorcomparator()返回对此 set 中的元素进行排序的比较器。Iterator iterator()返回元素按升序进行迭代的迭代器。IteratordescendingIterator()返回元素按降序进行迭代的迭代器。Efirst()返回第一个元素。Elast()返回最后一个元素。Eceiling(E e)返回大于等于给定元素的最小元素;如果不存在,则返回 null。Efloor(E e)返回小于等于给定元素的最大元素;如果不存在
21、,则返回 null。Elower(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接口是实现映射集合的根接口,其定义了关于映射集合的相关操作方法。返回类型方法名方法功能voi
22、dclear()删除集合中的所有元素booleancontainsKey(Object key)查询集合中是否存在指定的key键booleancontainsValue(Object value)查询集合中是否存在指定的value值SetMap.EntryentrySet()返回集合中包含的所有键值对的Set集合视图。booleanequals(Object o)比较指定的对象与此集合对象是否相等。Vget(Object key)返回指定键所映射的值;如果键不存在则返回 null。表8.9 Map接口的常用方法8.5.1 Map 接口返回类型方法名方法功能booleanisEmpty()查询集
23、合是否为空。SetkeySet()返回集合中包含的所有键的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,
24、 Serializable8.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”的电话号码是多少。Exam
25、ple8_08.java8.5.3 TreeMap集合类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()返回此集合中所有键的逆序集合视图。M
27、ap.EntryfirstEntry()返回此集合中最小键的键值对;如果集合为空,则返回 null。KfirstKey()返回此集合中第一个(最小)键。Vget(Object key)返回指定键所映射的值,如不存在,则返回 null。SetkeySet()返回此集合中所有键的Set视图。Map.EntrylastEntry()返回此集合中的最大键的键值对;如果为空,则返回 null。Map.EntrypollFirstEntry()移除并返回与此集合中的最小键的键-值对;如果为空,则返回 null。表8.12 TreeMap类的常用方法【例8.9】将例8.8的电话簿按姓名排序输出。 Examp
28、le8_09.java8.2 集合类总览8.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()方
29、法。hasNext()方法判断是否遍历到集合的最后一个元素;next()方法返回迭代器指向的下一个元素;remove()方法删除迭代器当前返回的元素。Java提供的ListIterator接口扩展了Iterator接口的功能,定义了逆向遍历的方法,实现List接口的类均实现了ListIterator迭代器。【例8.10】删除数组中长度为偶数的字符串。 Example8_10.java8.6.2 使用CollectionsCollections类与Collection接口的区别:Collection接口是一类集合的根接口,提供对这类集合中的元素进行基本操作的通用方法。Collections类是具
30、体的实现类,为实现Collection接口的集合提供了一系列静态方法,完成元素的处理,如排序、查找、特定变换等操作。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替换列表li
31、st中的所有元素。static Tmax(Collection coll)按自然顺序,返回集合coll的最大元素。static Tmax(Collection coll, Comparator comp)按指定比较器comp产生的顺序,返回集合coll的最大元素。表 8.13 Collections类常用方法8.6.2 使用Collections返回类型方法名方法功能static Tmin(Collection coll)按元素的自然顺序 返回集合coll的最小元素。static booleanreplaceAll(List list, T oldVal, T newVal)使用元素newVa
32、l替换列表中出现的所有oldVal元素。static voidreverse(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表
33、达式Lambda表达式是Java 1.8中新增的一种特性。Lambda表达式用更少的代码实现同样的功能。代码更简洁紧凑,支持大集合的并行操作。Java 1.8新增了java.util.stream和java.util.function两个包用于扩展集合的操作。8.6.3 使用Lambda表达式stream可以在集合上建立一个管道流,进入流的集合元素可以进行一些中间操作,如对元素进行条件过滤。条件的给定就要使用function包中的类完成;最后可以对符合条件的元素进行相关处理,如字符转换,数据计算等。Lambda表达式配合这两个包的应用,大大增强了对集合的处理能力。8.6.3 使用Lambda表
34、达式1. Lambda表达式Lambda语法格式:(parameters)-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.println(name);System.out.println(number)有两个String类型参数,分别进行输出,没有返回值; x-2*x有一个参数,返回它本身的2倍。8.6.3 使用Lambda表达式2. stream流stream表示数据流,流本身并不存储元素,在流中的操作也不会改变源数据,而是生成新Stream。在数据流中,可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年厨电线上商城行业深度调研及发展战略咨询报告
- 2025-2030年数据格式转换工具行业深度调研及发展战略咨询报告
- 2025-2030年啤酒酿造物联网集成平台行业跨境出海战略研究报告
- 2025-2030年商务男装专卖店行业深度调研及发展战略咨询报告
- 2024年12月南通再就业工程开发有限公司外包人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 文化创意产业居间协议
- 广告行业合作居间协议
- 船舶运输安全责任协议
- 展览会装饰工程施工方案与创意措施
- 新老系统迁移及整合方案
- 钢结构考试试题(含答案)
- 彭大军桥牌约定卡
- 新能源整车装配工艺培训的资料课件
- 房车露营地的研究课件
- 园艺疗法共课件
- DB33T 628.1-2021 交通建设工程工程量清单计价规范 第1部分:公路工程
- 医院-9S管理共88张课件
- 设立登记通知书
- 2022医学课件前列腺炎指南模板
- MySQL数据库项目式教程完整版课件全书电子教案教材课件(完整)
- 药品生产质量管理工程完整版课件
评论
0/150
提交评论