java入门第17章编程常用知识_第1页
java入门第17章编程常用知识_第2页
java入门第17章编程常用知识_第3页
java入门第17章编程常用知识_第4页
java入门第17章编程常用知识_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第17章编程常用知识在本章中,我们将学习Java编程中一些经常用的知识。这些知识可以说在任何一个程序中几乎都需要用到。如果说编程是一道菜的话,那么本章中介绍的内容将是盐:一方面本章中学习的内容不可能成为一个程序的主要内容,它是为程序的主要内容服务的,就像盐不是一道菜的主要部分;另一方面,如果不掌握本章介绍的知识,那么在编程的时候是会觉得很别扭的,就像是做菜的时候找不到盐。学习本章的内容需要以下知识为基础。17.1再谈对象的比较本节中首先讨论一下对象比较的问题。严格来说,任意两个对象都是不相等的。对象的相等其实就是一个“逻辑”上的相等。在9.2.3中,曾经介绍过如何使用equals方法比较两个字符串对象是否相等。当两个字符串的内容一样的时候,就可以认为两个字符串是相等的。其实比较两个普通的对象也是一样的过程。好,下面开始本节的内容。17.1.1hashcode方法在这里要说的就是equals(Object)方法和hashcode()方法。为了不与Javadoc中的内容重复,读者请先去Javadoc中查看这两个方法相关的内容。为了让hashcode()方法保持其原有的意义,当我们覆盖hashcode()方法时,至少应该满足“若是两对象相等,则其hashcode也相等;否则则不等”。hashcode()方法的返回值就好像是一个对象的“身份证”号,如果两个对象的“身份证”号相同,即使这两个对象其实并不是同一个对象,也可以认为它们是相等的对象。理解hashcode()方法的意义。17.1.2equals方法equals(Object)方法是用来比较两个对象是否相等的方法。Java类库中很多类都会使用这个方法来比较两个对象。equals方法的参数是一个Object类型的引用。这就说明任意两个对象都是可以进行比较的——a.equals(b)就是比较a和b两个对象是否相等。但是,实际上如果两个对象的类型不同,那么比较的结果肯定是不相等。所以我们在这里说的比较两个对象都是指的两个同一个类的对象。17.1.3equals方法关于对象的比较,现在主要掌握如何使用就可以了。我们知道两个String类对象如果相等,那么它们的hashcode也是一样的。为一个类编写完全满足条件(Javadoc中给出了条件)的hashcode方法和equals方法其实并不容易。17.2Java中的集合类框架本节将讲述Java中集合类框架的基础知识。集合类框架对实现了“java.util.Collection”接口的类的统称。每个集合类框架都是用来存储一组元素的。Java类库中提供了多个集合类框架,它们分别有不同的适用场合。也许初看上去它和数组有些许类似,但是它远比数组的功能强大的多。每次需要处理多个元素的时候,集合类框架中的某个类都是首选。本节中主要是介绍这些集合类框架的使用,如果要理解这些“集合类为何这么设计”,“如何实现这些功能”,需要“数据结构”这门课中的专业知识。下面我们开始本节的内容。17.2.1集合类框架中的接口Java中的集合类框架相关的类和接口都属于“java.util”包。要摸清Java他们的结构,最好的办法就是先看看集合类框架中的几个接口。17.2.2List接口单词List的意思就是列表。java.util.List接口中主要定义了一些存放、获取和删除元素的方法,如同一个列表。在这三个接口中,它可以说是最常用的了。这里所说的元素就是引用(注意,不能是基本数据类型变量)。它跟我们之前学习的引用的数组有相似的地方,但是它远比数组用着方便。下面首先看看List接口中定义了那些重要的方法。voidadd(Object)方法:voidadd(int,Object)方法:Objectget(int)方法:Objectremove(int)方法:voidset(int,Object)方法:intsize()方法:17.2.3使用ArrayList本节中将讲述List接口的实现——ArrayList的用法。List的其它实现类的使用方法也是大致相同的。同时,本节中还将从List与ArrayList的关系看接口的优势。1学习使用ArrayList2接口的力量17.2.4Set接口单词“Set”的意思就是“集合”。这个“集合”就是数学中学过的集合。集合是“同一类元素的聚集,且其中的元素不重复,且元素无序排列”。java.util.Set接口则是以集合的概念为基础,规定了一组对集合进行操作的方法。Set接口代表了集合的概念。Set接口中定义了一组对集合的操作。17.2.5使用HashSet类因为Set中的元素排列是没有顺序的,所以与List接口不同,Set接口中并没有定义通过一个索引得到相应元素的get(int)方法。为了能够遍历Set中的元素,可以使用toArray()方法。学习使用Set。“集合中的元素不重复”是集合最大的特点。集合中的元素排列是没有顺序的,也就是说元素的顺序是随着元素的增删而变化的。这点在使用时需要注意。17.2.6List与Set从直观上看,List更像是前面学过的数组。不过它的功能更强大,使用时无需关心是否会超过其容量等问题。它会按照添加元素的顺序来存放元素,并可以通过get(int)方法来获得相应的元素。在所有使用数组的地方,其实都可以使用List代替。使用List的典型过程就是想其中增删元素,并对List中的元素进行遍历。Set则可以被看为是满足数学中“集合”定义的接口。当需要保证元素不会重复的时候,就需要用到Set了。Set典型的用法是向其中增加元素,并根据返回值判断是否增加成功。然后使用contains(Object)方法判断一个元素是否已经包含在集合中了。对Set中的元素进行遍历的情况较少。在实际编程中多使用集合类。17.3泛型(GenericsTypes)简介泛型是的英文名称是GenericsTypes,是Java5中新增的一个功能。主要的功能是让“让类型也能够作为参数,并在使用时确认参数”。本小节中将不会涉及泛型的编程,只介绍如何在前面学习的集合类框架的类中使用泛型。实际上,编写使用泛型的类对于初学Java来说是不切实际的。学会使用泛型就足够了。下面开始本节的内容。17.3.1没有泛型时的程序那么泛型是什么个东西呢?不急,我们首先从一个使用ArrayList的例程入手。正如我们前面学习的那样,向List中添加元素的时候,这个元素会被当作是一个Object类型的对象;同样,当从中取出一个元素的时候,它的类型也是Object的。这样,如果放如的元素不是Object对象,那么当取出来之后,就可能需要强制类型转换。不使用泛型,则有时候必须使用强制类型转换。进行不要进行强制类型转换,因为它可能会造成异常。17.3.2使用泛型——避免强制类型转本小节中将展示如何使用泛型,并简要分析使用泛型的利与弊(限制)。最后,会简要说明如何去理解Java中的泛型。1使用泛型的好处2使用泛型的限制3理解泛型——将类型作为参数17.4Map接口本节中将介绍java.util中的另一个十分常用的接口——Map,想想下面这个问题。我们把多个Student对象放入List对象里面。但是如果知道一个name属性的值,想找到对应的Student实例,那么就必须写一个方法,在里面遍历整个List中的元素,一个个比较,并返回结果。但是这样做显得太麻烦。Map接口中定义了一组方法,用于让这个问题简单化。17.4.1认识Map本小节中,将解释与Map相关的一个重要概念——键值对。在理解了键值对的概念后,本小节会给出Map接口中定义的主要方法。1键值对2名字和人,键和值3Map接口17.4.2使用HashMapHashMap实现了Map接口,下面的例程中演示了这个它的用法。例程中将使用Student作为值,用String作为键。Map和HashMap也是使用了泛型的。我们可以在使用它们的时候传递两个类型参数,分别代码键的类型和值的类型。下面的代码就是Map使用泛型的方式。Map<String,Student>students=newHashMap<String,Student>();上面的代码指定了String类型作为键的类型,Student类型作为值的类型,当尝试将不同的类型用于students上时候,则在编译源代码时会出现上面看到过的类似的错误。17.5字符集和编码在前面的学习中,字符串是接触的最多的类了。字符串是由一个个的字符组成的。但是我们知道,计算机只能够处理数字。那么在计算机中,字符又是如何处理的呢?本节中的内容将讲述Java中字符表示和处理相关的内容。17.5.1字符集世界上的字符有很多,根据不同使用需要,将字符组成一个合集,就叫做字符集了。一般来说,字符集都是对应着一种或多种语言。在现实中常用的字符集有很多。常用的有下面几个。ASCII:全称叫做“美国信息交换标准码(AmericanStandardCodeforInformationInterchange)”。它是目前计算机中应用最为广泛的英文字符集,包括含128个字符。其中有大小写英文字符和一些标点符号。GBK:中国制定的字符集保准。“GB”是“国标”二字的首字母。此字符集包括绝大多数简体中文字符,繁体中文字符以及其它一些字符。Unicode:ASCII、GBK这两种字符集中包含的字符都是针对某种语言的。在多语言环境下,比字符集就是根据不同的使用需要,把字符归结为一个集合。一个字符集中包含一定数量的字符。17.5.2编码在计算机中,一个字符是被当作整数存储的。当一个整数代表一个字符时,它的值就是一个字符的编码。编码集就是整数和字符的对应关系合集。一般来说,一种字符集对应一种或者多种编码。因为计算机只能处理数字,所以使用编码集是为了让计算机能够处理字符。编码和操作系统有密切关系。Java内部使用的是UTF-16编码。17.5.3关于字符集的小程序在本节中将通过几个小程序,来展示字符与int值之间的转换关系。我们知道,字符串是由字符组成的。但是因为字符串需要进行存储,而计算机存储数据的基本单位是byte。所以本节中还将通过两个小程序演示字符串与byte数组(字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论