版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章Java中的类库前面的章节已经介绍了如何创建自己的类,如何使用系统提供的类。从各个案例中,可以体会到,在实际的项目开发中会有很多的对象,如何高效、方便地管理这些对象,成为影响程序性能与可维护性的重要环节。Java中为这个问题提供了一套完美的解决方案,这就是本章所要介绍的Java中的类库以及集合框架。4.1Java语言基础类库面向对象(ObjectOriented简称OO)是当今主流的程序设计方式,取代了20世纪70年代的“过程化”程序设计。Java是完全面向对象的语言,用其进行面向对象的软件开发是非常方便、高效的。本节将对面向对象的基础知识进行简单的介绍,主要包括面向对象程序设计思想的诞生、面向过程与面向对象程序设计思想的对比、面向对象技术的背景和特点等三方面的内容。随着软件复杂度的提高,以及Internet的迅猛发展,原先面向过程的软件开发方式已经很难满足软件开发的需要。针对日趋复杂的软件需求挑战,软件业界发展出了面向对象的软件开发模式。目前作为针对软件危机的最佳对策,OO技术已经引起人们的普遍关注。许多编程语言都推出了面向对象的新版本,一些软件开发合同甚至也指明了必须使用基于OO的技术和语言。4.2Object类Object类是所有Java类的顶层类,即所有类的祖先类(继承树的根)。如果一个类没有使用extends关键字继承某个类,那么编译器会自动将所创建的类视为Object类的子类。在Java语言中,无论是已经存在的,还是自己定义的类,实际上都继承了Object类的所有方法。4.2Object类方法作用protectedObjectclone()用于获得此对象的一个拷贝publicboolean
equals(Object
obj)用于判断参数对象和此对象是否相等protectedvoidfinalize()当垃圾回收器认为此对象不会再被引用时,垃圾回收器就会调用此方法publicfinalClassgetClass()用于获得此对象的所属类的类名publicint
hashCode()用于获取一个此对象对应的哈希表publicfinalvoidnotify()用于唤醒一个等待此对象监视器的线程publicfinalvoidnotifyAll()用于唤醒所有等待此对象监视器的线程publicStringtoString()用于获得一个代表此对象的字符串publicfinalvoidwait()用于挂起当前的线程publicfinalvoidwait(longtime)用于挂起当前的线程,直到其他线程调用此对象的notify()或notifyAll()方法,或制定时间段time已过publicfinalvoidwait(long
time,int
nanos)用于挂起当前的线程,直到其他线程调用此对象的notify()或notifyAll()方法,或制定时间段time已过4.3Java中的集合框架概述前面的章节已经介绍了如何创建自己的类,如何使用系统提供的类。从各个案例中,读者可以体会到,在实际的项目开发中会有很多的对象,如何高效、方便地管理这些对象,成为影响程序性能与可维护性的重要环节。Java中为这个问题提供了一套完美的解决方案,这就是本章所要介绍的集合框架。4.3Java中的集合框架概述4.4列表(List)通过上一节的介绍,已经了解了Ordered与Sorted的区别,下面将介绍集合框架中Ordered的几个接口与类。基本所有Ordered的接口与类都是属于列表(List)家族的,本节将对列表家族的接口与类进行介绍。4.4.1列表接口List接口继承自Collection接口,代表列表的功能(角色),其中的元素可以按索引的顺序访问,所以也可以称之为有索引的Collection。4.4.2列表的数组实现数组通过ArrayList类实现。ArrayList类是List接口最常用的实现之一,可以向其中添加包括null值在内的所有对象引用型的元素,甚至该类对象引用自己也可以作为其中的元素,这样可以方便的搭建一个树状结构的集合。构造器签名功能publicArrayList()该构造器将构造一个空的ArrayList对象。该对象的初始容量为10publicArrayList(int
initialCapacity)参数initialCapacity表示指定的初始容量,该构造器将构造一个具有指定容量的空ArrayList对象publicArrayList(Collectionc)参数c为包含指定元素的Collection。该构造器将构造一个以c中的元素为初始内容的ArrayList对象4.4.3向量Vector(向量)类的历史比较悠久,从Java一诞生就有,后来被作为集合框架的一部分,其性能特点与ArrayList基本上是相同的。不同之处是该类的功能方法是同步的,同一时刻只能有一个线程访问,没有特殊需要,现在一般都使用ArrayList。构造器签名功能publicVector()该构造器将构造一个空的Vector对象。该对象的初始容量为10publicVector(int
initialCapacity)参数initialCapacity表示指定的初始容量,该构造器将构造一个具有指定容量的空Vector对象publicVector(int
initialCapacity,
int
capacityIncrement)参数initialCapacity表示指定的初始容量,参数capacityIncrement表示当Vector满了时候,其容量的增量。该构造器将构造一个具有指定初始容量与指定增量的空Vector对象publicVector(Collectionc)参数c为包含指定元素的Collection。该构造器将构造一个以c中的元素为初始内容的Vector对象4.4.4列表的链接实现本小节主要介绍LinkedList类,功能与ArrayList、Vector相同,都是列表(List)的实现。其内部是依赖双链表来实现的,因此具有很好的插入删除性能,但随机访问元素的性能相对较差,适合用在插入、删除多,元素随机访问少的情况。构造器签名功能publicLinkedList()该构造器将构造一个空的LinkdList对象publicLinkedList(Collectionc)参数c为包含指定元素的Collection。该构造器将构造一个以c中的元素为初始内容的LinkedList对象4.4.5将数组转换为列表在开发中经常有这样的情况,需要将对象数组转换为列表来进行处理,可能会想到用循环来编程解决,其实不用,Java类库中java.util.Arrays类的静态方法asList就提供了这样的功能,下面给出了该方法的签名。publicstaticListasList(Ta)4.5集合(Set)Set接口及其子接口与实现了这些接口的类都可以称为集合(Set),本节将对集合相关的知识进行详细的介绍。首先介绍集合中的各个接口与类,然后介绍了集合的遍历以及从JavaSE5.0开始提供的for-each循环在遍历集合时的运用。4.5.1Set接口及含义Set接口也继承自Collection接口,其与同样继承自Collection接口的List不同之处如下。(1)List按顺序将对象引用添加进去,对引用指向的对象没有特别的要求,而Set要求在其中的任意两个引用指向的对象equals比较都返回False。也就是说,Set中不允许有重复的元素。(2)List中的元素有顺序,就是添加的顺序,Set中的元素没有顺序,Java有权以任意的顺序进行摆放。4.5.2HashSet类的使用HashSet类是Set接口最常用的实现之一,既不是Ordered的也不是Sorted的,元素在其中存储不保证任何顺序。实际上,HashSet存储对象引用时是按照哈希策略来实现的。另外,可以向HashSet中添加null值,但只能添加一次。构造器签名功能publicHashSet()该构造器将构造一个空的HashSet对象。该对象的初始容量为16publicHashSet(int
initialCapacity)参数initialCapacity表示指定的初始容量,该构造器将构造一个具有指定容量的空HashSet对象publicHashSet(Collectionc)参数c为包含指定元素的Collection。该构造器将构造一个以c中的元素为初始内容的HashSet对象4.5.3LinkedHashSet类的使用LinkedHashSet类是Ordered的,采用双链表实现,元素在其中的存储有固定的顺序,也就是插入元素的顺序。构造器签名功能publicLinkedHashSet()该构造器将构造一个空的LinkedHashSet对象。该对象的初始容量为16publicLinkedHashSet(int
initialCapacity)参数initialCapacity表示指定的初始容量,该构造器将构造一个具有指定容量的空LinkedHashSet对象publicLinkedHashSet(Collectionc)参数c为包含指定元素的Collection。该构造器将构造一个以c中的元素为初始内容的LinkedHashSet对象4.5.4SortedSet接口与TreeSet类本小节主要包括如下两方面的内容。SortedSet接口TreeSet类1.SortedSet接口2.TreeSet类4.5.5自定义满足Sorted集合的类插入到Sorted的集合中的元素都必须有天然的顺序,如上小结插入的字符串,就以字母数字为天然顺序。如果需要将自己开发类的对象作为元素,此类必须实现Comparable接口。其实,字符串之所以有其天然顺序,也是因为其类实现了Comparable接口。在插入元素时,由Comparable接口中compareTo方法的返回值来决定元素的顺序。该方法将返回一个int值,负整数、零或正整数代表了此对象是小于、等于还是大于指定对象。4.5.6定制SortedSet的排序规则从前面的例子中可以看出,SortedSet是按照元素的先天顺序(compareTo方法的返回值)排序的,但实际开发中可能会出现同一类型的元素在不同的SortedSet中按不同规则排序的需求,这时只是让元素所在类实现Comparable接口就不能满足要求了。要想满足上述要求,就需要实现Comparator接口。实现了Comparator接口的类通常称为比较器,可以给不同的SortedSet指定不同的比较器,以达到按不同规则对元素进行排序的需求。Comparator接口中的compare方法将描述特定的排序规则,该方法的签名如下。int
compare(Objecto1,Objecto2)4.5.7集合的遍历实际开发中,经常需要对集合中的所有元素进行遍历,对于List系列而言,可以利用元素的索引进行,而Set系列是没有索引的,这时就需要使用迭代器来完成遍历。迭代器是一个实现了Iterator接口的类的对象,所有实现了Collection接口的类都有一个名称为iterator的方法来获取迭代器。方法签名功能boolean
hasNext()该方法将测试集合中是否还有没遍历到的元素,如果有则返回True,否则返回FalseObjectnext()该方法将返回集合中下一个将要遍历的元素,如果集合中没有需要遍历的元素,将抛出NoSuchElementException,所以该方法经常与hasNext方法连用voidremove()该方法将下一个将要遍历的元素移除需要遍历对象的范围,也就是说,将不再遍历到下一个将要遍历的元素4.6映射(Map)通过前面章节的介绍,读者了解了Collection接口各个实现的特点与使用,下面将介绍集合框架中另外的几个接口与类,它们不继承或实现自Collection接口。从本章4.3小节的图4.1中可以看出,该部分是从Map接口继承或实现而来的,一般称为映射集。Map接口是实现键值映射数据结构的一个框架,可以用于存储通过键值引用的对象。键值的作用其实就相当于数组中的索引,每一个键值都是唯一的,可以利用键值来存取数据结构中指定位置上的数据。本节首先分别介绍映射集中的接口与类,然后介绍了如何对映射集进行遍历操作。4.6.1Map接口及含义Map也可以称之为键/值集合,因为在实现了该接口的集合中,元素都是成对出现的,一个称之为键,另一个称之为值。键和值都是对象,键对象用来在Map中惟一的标识一个值对象。键对象在Map中不能重复出现,就像Set中的元素不能重复一样。4.6.2HashMap类的使用HashMap类是Map接口的最常用实现之一,既不是Ordered的也不是Sorted的。该类通过对键计算哈希码来决定值的存储,不保证键的存储顺序。另外,该类的键值允许为null,但只能出现一次。构造器签名功能publicHashMap()该构造器将构造一个空的HashMap对象,其初始容量为16publicHashMap(Mapm)参数m为包含指定键值对的Map。该构造器将构造一个以m中的键值对为初始内容的HashMap对象4.6.3Hashtable类的使用Hashtable与列表中的Vector相同,是从早期Java遗留下来的,后来被作为集合框架的一部分。其功能特性与HashMap基本上是相同的,不同之处是该类对元素操作的方法为同步方法,在运行时有可能损失一些性能。因此,在没有特别要求的情况下,一般选用HashMap而不是Hashtable。构造器签名功能publicHashtable()该构造器将构造一个空的Hashtable对象,其初始容量为11publicHashtable(Mapm)参数m为包含指定键值对的Map。该构造器将构造一个以m中的键值对为初始内容的HashMap对象4.6.4LinkedHashMap类的使用LinkedHashMap类是通过双链表的方式实现的Map,这点与LinkedHashSet类相同,是一个Ordered类型的Map,键按照插入集合的顺序存储。LinkedHashMap类的基本功能与HashMap相同,插入/删除的效率比HashMap略差,遍历的效率比HashMap略高。构造器签名功能publicLinkedHashMap()该构造器将构造一个空的LinkedHashMap对象,其初始容量为16publicLinkedHashMap(int
initialCapacity)参数initialCapacity表示指定的初始容量,该构造器将构造一个具有指定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论