Java高级API精品教程教案:1.集合框架和泛型(一)
- 格式:pptx
- 大小:1.05 MB
- 文档页数:20


集合框架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。
2.j a v a高级集合部分集合框架Key Point* Collection 接口、Set 接口、List 接口基本操作:一)集合框架:Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类)。
所有抽象出来的数据结构和操作(算法)统称为集合框架。
三)集合框架的接口(规范)Collection接口:存储一组不唯一,无序的对象List接口:存储一组不唯一,有序的对象Set接口:存储一组唯一,无序的对象Map接口:存储一组键值对象,提高键(key)到值(value)的映射(四)各种接口的实现类:List接口的2个常用实现类:ArrayList和LinkedListArrayList类:在它的底层代码中,实际是有一个Object型数组,通过一些方法实现数组的扩容,数组本身长度是在定义的时候就不能改变,JDK的源码底层就是通过新创建一个数组,长度比原来的长,把之前原数组的每个元素复制过来,然后把新数组的首地址赋值给了原数组的引用,就这样实现了可变长度数组;所以ArrayList的特点就是:遍历和随机访问的速度快,插入对象和删除对象的效率就低,因为底层的实现是通过数组来实现LinkedList类:底层通过结点来实现的,它有2个Node结点属性,一个根结点first,一个尾结点last。
添加的元素是保存在Node结点属性中item,看下面JDK源码,然后通过Node还有2个属性next和prev分别指向后一个保存元素的结点和指向前一个保存元素的结点;就这样形成一条逻辑上的一条链,它们在堆内存中内存是不连续的;所以LinkedList类的特点:访问元素的效率不高,但是插入和删除元素的效率高,因为通过结点改变指向就可以实现了。
HashMap底层就是通过结点数组(数组+结点)来实现的,为什么put()方法存key和value的时候,key不能重复,重复的话value会覆盖原先的value,key值在底层是通过它的hashCode来保证唯一性同样的来讲解一下HashSet,给大家看看一个它的JDK源码,map 是HashMap类型,把数据存储到map的key中,所以说HashSet存储的元素是不能重复的* List 接口及其实现类:List接口及其实现类:特点:其元素以线性方式存储;元素可重复;元素有序;可以对元素的位置精确控制;实现类:ArrayListLinkedListVectorStackList接口常用的方法:booleanadd(E e): 向列表尾部添加指定的元素;voidadd(int index, E element): 在列表指定位置插入指定元素;booleanaddAll(Collection c): 添加指定的collection中的所有元素到此列表的结尾;booleanaddAll(int index,Collection c): 将指定的collection中的所有元素插入到列表中的指定位置;设置元素:Eset(int index, E element):用指定的元素替换列表中的指定位置的元素获取元素:Eget(int index): 返回列表中指定位置的元素;intindexOf(Object o): 返回此列表中第一次出现的指定元素的索引,否则返回-1;intlastIndexOf(Object o): 返回次列表中最后出现的指定元素的索引,否则返回-1;List<E>subList(int formIndex, int toIndex): 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的子列表;移除元素:Eremove(int index):移除列表中指定位置的元素;booleanremove(Object o):从此列表中移除第一次出现的指定的元素(如果存在);voidclear():从列表中移除所有元素;相关判断方法:boolean contains(Objecto):如果列表包含指定的元素,则返回true;booleancontaionsAll(Coollection c):如果列表包含指定collection的所有元素,则返回true;booleanequals(Object o):比较指定的对象与列表是否相等;boolean isEmpty():如果列表不包含元素,则返回true;* Set 接口及其实现类:1.Set接口Set是对数学上集的抽象,Set中不包含重复的元素.如何界定是否是重复元素?Set最多可含一个null元素;对于任意的非null元素e1和e2,都满足e1.equals(e2)==false.Object.hashcode()的约定:a.在程序的一次执行中,无论何时在同一个java对象上重复调用hashcode(),都必须一致地返回同一个整数值,并不像Object.equals()那样提供Object是否被修改了的信息,但这个整数值不必在同一个应用程序的多次运行之间保持一致.b.如果两个Object通过equals()判断是相等的,那么,在这两个Object上调用hashcode()必返回相同的值.c.如果两个Object通过equals()判断是不相等的,那么,并不要求这两个Object.hashcode()返回不同的整数值.2.Set实现HashSet是使用一个哈希表存储元素的,是非排序的,可以随机访问,是Set的最优性能实现.TreeSet实现了SortedSet接口,使用一个红黑树来存储元素,提供了元素的有序存储和访问.2.1 HashSetHashSet在底层实现上依赖于HashMap.2.2 TreeSetSet接口有一个子接口:SortedSet,提供了集合元素的顺序存储,其中元素保持升序排列.为了在加入一个元素到SortedSet实现时能对这些元素排序,元素类型必须实现Comarable接口,或者建立SortedSet时使用Comparator.否则程序在运行时将抛出ClassCastException.3.使用Set的注意事项如果Set中存储了可变对象,当这些对象出现重复元素,从而从根本上违反了Set 的约定,Set的行为也变得不确定.所以,在Set中存储可变对象时,一定要十分小心.同样,对于Map中的key也一样,因为Map中的key也是不允许重复的.* 迭代遍历* Comparable 接口:1.什么是Comparable接口此接口强行对实现它的每个类的对象进行整体排序。
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)。