JAVA集合与泛型ppt课件.ppt
《JAVA集合与泛型ppt课件.ppt》由会员分享,可在线阅读,更多相关《JAVA集合与泛型ppt课件.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java程序设计程序设计16 June 2022第9章集合类与泛型程序设计集合类与泛型程序设计Java程序设计程序设计26 June 20229.1 Java中的集合类结构中的集合类结构 Java提供了集合类提供了集合类(Collection)及其及其API,于是用户可以通,于是用户可以通过统一的操作接口,使得从一种数据结构到另一种数据结构过统一的操作接口,使得从一种数据结构到另一种数据结构的转换极为方便,简化了程序员编程时的负担。的转换极为方便,简化了程序员编程时的负担。 任何集合框架包括三部分内容:任何集合框架包括三部分内容:对外的接口对外的接口接口的实现接口的实现对集合运算的算法对集合运
2、算的算法 集合集合API的根是一个集合接口,存放于的根是一个集合接口,存放于java.util包中。包中。Collection接口定义了所有属于集合的类都应该具有的通用接口定义了所有属于集合的类都应该具有的通用方法。方法。Java程序设计程序设计36 June 2022 Java集合框架结构由两颗接口树构成:集合框架结构由两颗接口树构成: 第一棵树根节点为第一棵树根节点为Collection接口接口,它定义了所有集合的,它定义了所有集合的基本操作,如添加、删除、遍历等。它的子接口基本操作,如添加、删除、遍历等。它的子接口Set、List等则提供了更加特殊的功能。等则提供了更加特殊的功能。第二棵
3、树根节点为第二棵树根节点为Map接口接口。与哈希表类似,保持的是键。与哈希表类似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。值对的集合,可以通过键来实现对值元素的快速访问。Java程序设计程序设计46 June 2022Collection接口 Collection Set List SortedSet AbstractSet TreeSet HashSet AbstractList ArrayList Vector AbstractSequentialList Stack LinkedList Java程序设计程序设计56 June 2022Map接口 Map Abstrac
4、tMap TreeMap HashtMap WeakHashMap Java程序设计程序设计66 June 2022Collection:n每个元素都是单一对象。List以特定顺序容纳元素。Set中不能有重复的元素。Map:n每个元素都是一对key-value(键值实值)对象,且每个元素中的键值都不能与其他元素中的键值相同。Java程序设计程序设计76 June 2022集合接口集合接口接口描述能使你操作对象数组,它位于集合框架层次结构的顶层扩展Collection,表示有序的,可包括重复元素的列表 扩展Collection,表示无序的,无重复元素的集合(数学上的含义)。 扩展Set,对Set
5、中元素进行排序 Java程序设计程序设计86 June 20229.2 Collection接口Collection接口是构造集合框架的基础。它声明所有集合类都将拥有的核心方法。 包含下面几种类型的方法增加元素,清除元素,判断元素的存在返回迭代接口,把集合转换成数组集合的大小Java程序设计程序设计96 June 20229.2 Collection接口方法名方法名功能说明功能说明boolean add(Object o)插入单个对象插入单个对象boolean addAll(Collection c)添加另外一个集合对象添加另外一个集合对象c中的所有对象中的所有对象Object toArray
6、()以数组的形式返回内容以数组的形式返回内容Object toArray(Object a)以数组的形式返回内容以数组的形式返回内容Iterator iterator()返回一个实现了返回一个实现了Iterator接口的对象接口的对象void clear()清空所有对象清空所有对象boolean remove(Object o)删除指定的对象删除指定的对象boolean ramoveAll(Collection c)删除删除c中所拥有的对象中所拥有的对象boolean retainAll(Collection c)保留指定的对象保留指定的对象boolean contains(Object o)
7、检查是否包含有指定的对象检查是否包含有指定的对象boolean containsAll(Collection c)检查是否包含检查是否包含c中所包含的对象中所包含的对象boolean isEmpty()判断集合是否为空判断集合是否为空int size()获取集合中的对象个数获取集合中的对象个数例例9-1Java程序设计程序设计106 June 20229.3 Set接口Set接口是一种不包含重复元素的接口是一种不包含重复元素的Collection的子接口。的子接口。Set接口中并没有引入新方法,它提供的基本方法和接口中并没有引入新方法,它提供的基本方法和Collection接口类似。接口类似。
8、Set接口派生了一个接口派生了一个SortedSet接口和一个抽象类接口和一个抽象类AbstractSet。 Java程序设计程序设计116 June 2022实现Set接口的类SortedSet接口用来描接口用来描述有序的元素集合述有序的元素集合TreeSet实现了这个接实现了这个接口,它将放入其中的元口,它将放入其中的元素按序存放,要求其中素按序存放,要求其中的对象是可排序的。的对象是可排序的。抽象类抽象类AbstractSet实实现了部分现了部分Collection接接口,并有一个子类口,并有一个子类HashSet,它以散列方,它以散列方式表示集合内容。式表示集合内容。Java程序设计程
9、序设计126 June 2022HashSet类类HashSet扩展AbstractSet并且实现Set接口。它创建了一个使用哈希表存储的集合,能快速定位一个元素,从而它创建了一个使用哈希表存储的集合,能快速定位一个元素,从而可以优化查询的速度,特别是在查找大集合时可以优化查询的速度,特别是在查找大集合时HashSet类比较有用。类比较有用。该类集使用散列表进行存储。在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashcode)。而散列码被用来当作与关键字相连的数据的存储下标。存储在HashSet中的元素必须正确覆盖java.lang.Object中定义
10、的hashCode()方法。 HashSet的构造函数如下:的构造函数如下: HashSet():创建一个空的哈希集。创建一个空的哈希集。 HashSet(Collection c):创建一个哈希集,并且将集合创建一个哈希集,并且将集合c中所有元素添加中所有元素添加进去。进去。 HashSet(int initialCapacity):创建一个拥有特定容量的空哈希集。创建一个拥有特定容量的空哈希集。 HashSet(int initialCapacity,float loadFactor):创建一个拥有特定容量创建一个拥有特定容量和加载因子的空哈希集。和加载因子的空哈希集。Java程序设计程序
11、设计136 June 2022loadFactor是是0.0 1.0之间的一个数,通常默认为之间的一个数,通常默认为0.75。加载因子定义。加载因子定义了哈希集合充满什么程度时就要增加容量。即当元素的数目大于哈了哈希集合充满什么程度时就要增加容量。即当元素的数目大于哈希集容量和加载因子之积时,哈希集容量将扩展。希集容量和加载因子之积时,哈希集容量将扩展。例:例:HashSet hs = new HashSet();hs.add(A);hs.add(B);hs.add(C);hs.add(D);hs.add(E);hs.add(F);hs.add(A);System.out.println(hs
12、);D, A, F, C, B, E从输出结果可以看出,元素并没有按顺序进行存储,并且也没有重复元素。例9-2Java程序设计程序设计146 June 2022TreeSet类类TreeSet为使用树结构进行存储的Set接口提供了一个工具对象按升序存储。访问和检索是很快的。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。Java程序设计程序设计156 June 2022TreeSet的使用的使用TreeSet hs = new TreeSet();hs.add(D);hs.add(E);hs.add(F);hs.add(A);hs.add(B);hs.add(
13、C);hs.add(A);System.out.println(hs);该程序的输出如下:A, B, C, D, E, FTreeSet按树存储其元素,它们被按照自然顺序自动安排,也不能有重复元素 例9-3Java程序设计程序设计166 June 20229.4 List接口List接口是包含接口是包含有序元素有序元素的一种的一种Collection子接口,其中的子接口,其中的元素必须按序存放。元素之间的顺序关系可以由插入的时元素必须按序存放。元素之间的顺序关系可以由插入的时间先后决定,也可以由元素值的大小决定。间先后决定,也可以由元素值的大小决定。List接口使用类似于数组下标的接口使用类似
14、于数组下标的索引索引的概念表示元素在的概念表示元素在List 中的位置。用户能够使用索引来访问中的位置。用户能够使用索引来访问List 中的元素。索引中的元素。索引从从0开始。为了保持元素的有序的特性,开始。为了保持元素的有序的特性,List接口新增加了接口新增加了大量的方法,使之能够在序列中间根据具体位置添加和删大量的方法,使之能够在序列中间根据具体位置添加和删除元素。除元素。 Java程序设计程序设计176 June 2022List接口的主要方法 方法名方法名功能说明功能说明void add(int index,Object element)在指定位置上添加一个对象boolean add
15、All(int index,Collection c)将c中的所有对象添加到指定位置ListIterator listIterator()返回一个ListIteratorListIterator listIterator(int index)返回指定的ListIteratorObject get(int index)返回指定位置的对象Object remove(int index)删除指定位置的对象Object set(int index,object element)用元素element取代位置index上的元素,返回被取代的元素int indexOf(object o)返回第一个匹配对象的
16、位置int lastIndexOf(object o)返回最后一个匹配对象的索引Java程序设计程序设计186 June 20229.4.1 LinkedList 类类类ArrayList、LinkedList、Vector、Stack等实现了等实现了List接口。接口。 LinkedList类提供了使用双向链表实现数据存储的方法,类提供了使用双向链表实现数据存储的方法,可按序号检索数据,并能够进行向前或向后遍历。可按序号检索数据,并能够进行向前或向后遍历。 由于插入数据时只需要记录元素的前后项即可,所以由于插入数据时只需要记录元素的前后项即可,所以插入数度较快,因此适合于在链表中间需要频繁进
17、行插插入数度较快,因此适合于在链表中间需要频繁进行插入和删除的操作。入和删除的操作。LinkedList的构造方法:的构造方法:LinkedList();创建一个空链表创建一个空链表LinkedList(Collection c);创建一个以集合创建一个以集合c中元素为初始值的链表中元素为初始值的链表Java程序设计程序设计196 June 2022Linkedlist接口的主要方法接口的主要方法 方法名功能说明public boolean add(Object element) 向链表末尾添加一个新的结点public boolean add(int index,Object o) 将对象o添
18、加到链表中由index指定位置public boolean addFirst(Object o)将对象o添加到链表的头部public boolean addLast(Object o)将对象向o添加到链表的末尾public boolean clear()删除链表的所有节点,成为空链表public Object remove(int index)删除指定位置上的结点public Object remove(Object o)删除首次出现含有o的结点public Object get (int index)返回链表中index位置处的结点对象例例9-4Java程序设计程序设计206 June 20
19、22 ArrayList类是类是List接口的一个可变长数组的实现,即一个接口的一个可变长数组的实现,即一个ArrayList类对象可以动态改变大小。每个类对象可以动态改变大小。每个ArrayList类对象类对象都有一个容量都有一个容量(Capacity),用于存储元素的数组的大小。容,用于存储元素的数组的大小。容量可随着不断添加新元素而自动增加。量可随着不断添加新元素而自动增加。序列以初始长度创建,当长度超过时,集合自动变大;当序列以初始长度创建,当长度超过时,集合自动变大;当删除对象时,集合自动变小。集合中允许存储删除对象时,集合自动变小。集合中允许存储null值。值。ArrayList类
20、的随机访问速度快,但是向表中插入和删除比类的随机访问速度快,但是向表中插入和删除比较慢。较慢。当需要插入大量元素时,在插入前可以调用当需要插入大量元素时,在插入前可以调用ensureCapacity 方法来增加方法来增加ArrayList 的容量以提高插入效的容量以提高插入效率。率。9.4.2 ArrayList 类Java程序设计程序设计216 June 2022 ArrayList常用的构造函数如下:常用的构造函数如下: ArrayList ():构建一个空的:构建一个空的ArrayList对象。对象。 ArrayList (Collection c):构建一个构建一个ArrayList对
21、象,并且对象,并且将集合将集合c中所有元素添加进去。中所有元素添加进去。 ArrayList (int initialCapacity):构建一个拥有特定容量构建一个拥有特定容量的空的空ArrayList对象。对象。 ArrayList的很多成员方法与的很多成员方法与LinkedList相似,两者的本质相似,两者的本质区别是一个使用顺序结构,另一个使用链表结构,因此,区别是一个使用顺序结构,另一个使用链表结构,因此,它也可以使用它也可以使用LinkedList类提供的方法进行列表的操作。类提供的方法进行列表的操作。例例9-59.4.2 ArrayList 类Java程序设计程序设计226 Ju
22、ne 20229.5 Iterator接口通常希望依次访问类集中的元素。到目前为止,除了使用集除了使用集合对象的合对象的get()方法可以实现对集合中的元素的遍历外方法可以实现对集合中的元素的遍历外,处理这个问题的最简单方法是使用iterator,Iterator是一个或者实现Iterator或者实现ListIterator接口的对象。Iterator可以遍历类集中的元素,从而获得或删除元素。ListIterator扩展Iterator,允许双向遍历列表,并可以修改。 Java程序设计程序设计236 June 2022Iterator接口的主要方法接口的主要方法 方法名功能说明boolean
23、hasNext()判断是否还有其他元素Object next()获取下一个元素void remove()删除最后一次调用next方法返回的元素Set keySet()返回Set类型的接口Java程序设计程序设计246 June 2022l Iterator迭代器只能前向循环,如果需要双向遍历,则迭代器只能前向循环,如果需要双向遍历,则可以使用更高级的可以使用更高级的ListIterator迭代器,迭代器,ListIterator接口接口继承自继承自Iterator接口。接口。lListIterator迭代器除了有迭代器除了有next()方法外,还新增了方法外,还新增了hasprevious()
24、方法和方法和previous()方法,实现前向遍历。方法,实现前向遍历。ListIterator还可以定位当前的索引位置,调用还可以定位当前的索引位置,调用nextIndex()和和previousIndex()就可以实现。就可以实现。 ListIterator迭代器迭代器Java程序设计程序设计256 June 2022ListIterator接口的主要方法接口的主要方法方法名功能说明void add(Object o)插入新的对象void set(Object o)修改最后一次调用next方法返回的元素void remove()删除最后一次调用next方法返回的元素boolean hasP
25、revious()判断前面是否还有元素Object previous()获取前一个对象int nextIndex()获取下一个元素的索引值int previousIndex()获取上一个元素的索引值Java程序设计程序设计266 June 2022Iterator使用使用ArrayList al = new ArrayList();Iterator itr = while (itr.hasNext()Object element = System.out.print(element + );详细例9-6使用使用Iterator的一般步骤:的一般步骤:调用集合对象的调用集合对象的Iterator
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 集合 ppt 课件
限制150内