《讲java集合类》ppt课件

上传人:tian****1990 文档编号:74517223 上传时间:2019-01-28 格式:PPT 页数:49 大小:310.81KB
返回 下载 相关 举报
《讲java集合类》ppt课件_第1页
第1页 / 共49页
《讲java集合类》ppt课件_第2页
第2页 / 共49页
《讲java集合类》ppt课件_第3页
第3页 / 共49页
《讲java集合类》ppt课件_第4页
第4页 / 共49页
《讲java集合类》ppt课件_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《《讲java集合类》ppt课件》由会员分享,可在线阅读,更多相关《《讲java集合类》ppt课件(49页珍藏版)》请在金锄头文库上搜索。

1、Java集合类(下),2019/1/28,Java集合类(下),2,collections framework概述,所有抽象出来的数据结构和操作统称为collections framework框架。Java程序员不必考虑数据结构的算法细节,只需要定义具体应用的数据结构实体。数据结构上的方法也用不着程序员去写,用系统的方法就行了,系统的方法总比一般程序员编的要快 所有这些framework都在java.util包中,2019/1/28,Java集合类(下),3,collections framework概述,在Java 2的Collections框架中,主要包括两个接口及其扩展和实现类:Coll

2、ection接口和Map接口 Collection是集合接口 Collections是集合类 Collection接口: Set不允许重复 List可以有重复元素,2019/1/28,Java集合类(下),4,Java类库中具体的集合(部分),2019/1/28,Java集合类(下),5,Collection接口,Collection API提供“集合”的功能 Collection API包含下述接口 Collection: 将一组对象以集合元素的形式组织到一起,在其子接口中分别实现不同的组织方式 Set: Collection的子接口,不记录元素的保存顺序,且不允许有重复元素 List: C

3、ollection的子接口,记录元素的保存顺序,且允许有重复元素,2019/1/28,Java集合类(下),6,Collection接口,定义了集合的基本行为,一个Collection的实现类的实例能够: 存放一个元素 增加/删除一个元素 查找一个元素是否在此集合中 计算此集合的元素数目 Collection没有约束元素的具体类型(是否为空也未规定),元素的顺序,元素是否可重复 部分Collection是整齐的(ordered)(注意,整齐的并不是一定是一定要经过排序的,即不一定是sorted).这样的Collection的元素之间在逻辑上是一个接一个(one by one),即可以得到一个元

4、素的下一个元素的引用.这些元素可以是排序的(sorted,元素的次序由自然顺序或者规定的顺序排列)也可以是未排序的(unsorted,元素顺序由插入的顺序决定) java.util.List接口继承Collection接口定义这一类Collection 部分Collection要求无重复的元素,称之为Set,java.util.Set接口继承Collection来定义这一类Collection,2019/1/28,Java集合类(下),7,Collection 层次结构,2019/1/28,Java集合类(下),8,Collection,ArrayList非常象Vector ,它实现了可变长的

5、数组。而LinkedList 则有些不同,它是List的链表实现。 LinkedList可以成为堆栈,队列或者双向链表.,2019/1/28,Java集合类(下),9,数组列表ArrayList,在编程中常常会遇到需要动态操纵数组,比如在运行时增加和删除数组元素,而且有时在编译时又不想确定数组大小希望它可以动态伸缩,在java中解决这一问题的方法是使用java.util包中的ArrayList类 ArrayList是List接口的一个可变长数组实现。,2019/1/28,Java集合类(下),10,数组列表ArrayList,public int size();/返回列表中的元素个数 publ

6、ic Object get(int index);/返回指定位置的元素 public void set(int index, Object obj);/设置指定位置元素 public void add(Object obj);/在列表末尾增加元素 public void add(int index, Object obj);/在列表指定位置插入元素 public void clear();/删除列表中所有元素 public void remove(int index);/删除列表中指定位置元素元素 public void contains(Object obj);/判断列表中指定对象是否存在,

7、2019/1/28,Java集合类(下),11,ArrayList示例(ArrayListExample),public class ArrayListExample public static void main( String args ) ArrayList al = new ArrayList(); / Create a new ArrayList for( int i=0; i10; i+ ) al.add( new Integer( i ) ); / Add Items to the array list for( int i=0; ial.size(); i+ ) System.

8、out.println( i + “ = “ + al.get( i ) ); al.remove( 5 ); al.set( 5, new Integer( 66 ) ); for( Iterator i=al.iterator(); i.hasNext(); ) Integer integer = ( Integer )i.next(); System.out.println( integer ); ,2019/1/28,Java集合类(下),12,A List Example,import java.util.* public class ListExample public stati

9、c void main(String args) List list = new ArrayList(); list.add(“one“); list.add(“second“); list.add(“3rd“); list.add(new Integer(4); list.add(new Float(5.0F); list.add(“second“); / duplicate, is added list.add(new Integer(4); / duplicate, is added System.out.println(list); Output: one, second, 3rd,

10、4, 5.0, second, 4,2019/1/28,Java集合类(下),13,Vector和ArrayList区别,要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是 最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。Vector类似于ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。 同步性(jdk 1.4) Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的

11、。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。 数据增长 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化

12、大小来避免不必要的资源开销。,2019/1/28,Java集合类(下),14,Vector和ArrayList区别,使用模式 在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?因为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢? 这意味着,你只是查找特定位置的元素或只在集合的末端增

13、加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkedList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。,2019/1/28,Java集合类(下),15,Set 接口(例:SetTest),Set 接口继承 Collection 接口,而且它不允许集合中存在重复项

14、,每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。 不能包含重复值,两个元素是否重复的依据是a.equals(b). 特例:因此最多只允许一个null存在 不能按照索引访问,因为Set的储存顺序不是有序的 Set的实现类往往有更快的对象操作(增加删除)速度,如: ArrayList查找一个对象是否存在于List中,需要遍历,而HashSet只根据哈希算法进行快速的查找(HashSet元素的储存不是有序的,2019/1/28,Java集合类(下),16,Set的实现类HashSet,

15、允许插入最多一个null值 不保证元素的顺序与插入的顺序一致,也不能按索引访问. 通过将插入的元素分成一束一束,达到更快的数据操作功能 实现原理,是利用了一个HashMap实例,以每个元素为key 如果储存元素的分布是均匀的,增删查的恒定,且比较高. 加入Set中的元素应该重载Object.hashCode()和Object.equals()方法(所有与哈希表有关的类都应该重载) HashSet是线程不安全的. 如需要同步,用Collections. synchronizedSE(Set set)方法创建一个Set 适用场合:需要储存大量的不可重复元素集合,频繁的增删操作,且不需要记录插入时顺

16、序.,2019/1/28,Java集合类(下),17,Set 接口(例:SetTest),HashSet h = new HashSet(); h.add(“1st“); h.add(“2nd“); h.add(new Integer(3); h.add(new Double(4.0); h.add(“2nd“); / 重复元素, 未被加入 h.add(new Integer(3); / 重复元素, 未被加入,2019/1/28,Java集合类(下),18,HashSet,HashSet继承AbstractSet并且实现Set接口。它创建一个类集,该类集使用散列表进行存储。正像大多数读者很可能知道的那样,散列表通过使用称之为散列法的机制来存储信息。在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashcode)。而散列码被用来当做与关键字相连的数据的存储下标。关键字到其散列码的转换是自动执行的?你看不到散列码本身。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号