《常用的工具类》PPT课件.ppt
第第6章章 常用的工具类常用的工具类 学习导读学习导读nJava的API中包含了大量的预定义类,本章将主要介绍Java的实用工具包java.util中的常用的一些数据结构类和工具类。另外,还将在本章中给大家介绍关于Applet小程序的基本知识。课程结构课程结构n6.1List和ArrayList类n6.2Set和HashSet类n6.3Map和HashMap类n6.4Vector类和Stack类n6.5泛型n6.6Applet小程序Java的集合(的集合(Collection)框架)框架 nJava的集合框架支持三种类型的集合:线性表List、规则集Set和映射Map。Set的实例存储一组互不相同的元素;List的实例存储一组顺序排列的元素;Map的实例存储一组对象,该实例中的每个元素都有一个关联的关键字。nCollection接口是构造集合框架的基础,它是处理对象集合的根接口,声明了所有Collection类都将拥有的核心方法,具体见表6-1。表6-1Collection接口声明的方法方法功能描述booleanadd(Objectobj)为当前调用的集合添加元素objbooleanaddAll(Collectionc)将c中的所有元素加入调用的集合中voidclear()删除当前集合的所有元素booleancontains(Objecto)若当前集合包含元素o则返回true,否则返回falsebooleancontainsAll(Collectionc)若当前集合包含集合c的所有元素则返回truebooleanequals(Objecto)若当前集合与o相等则返回true,否则返回falseinthashCode()返回当前集合的散列码booleanisEmpty()若当前集合不包含任何元素则返回trueIteratoriterator()返回当前集合元素的迭代探子booleanremove(Objecto)删除当前集合中的元素obooleanremoveAll(Collectionc)删除集合c中的所有元素booleanretainAll(Collectionc)删除当前集合中与集合c共有的元素,若当前集合发生变化则返回true,否则返回falseintsize()返回当前集合元素的个数ObjecttoArray()返回当前集合所有元素构成的数组ObjecttoArray(Objectarray)返回当前集合中指定数组元素类型相匹配的元素构成的数组6.1 List和和ArrayList类类nListList接口扩展了Collection接口,定义了一个可以存储重复元素的有序集合。用户可以通过指定下标访问元素,并可以指定元素在集合中的存储位置。在List类集中,下标从0开始。List接口除继承了Collection接口声明的方法外,还定义了它自己的一些方法,具体见表6-2。6.1 List和和ArrayList类类表6-2List接口声明的方法方法功能描述booleanadd(intindex,Objectelement)为当前调用的线性表添加元素element,插入位置由index指定,原有index位置及其右部的元素均后移booleanaddAll(intindex,Collectionc)将c中的所有元素插入调用的线性表中指定下标index位置,列表中原有index位置及其右部的元素均顺序后移Objectget(intindex)返回线性表中由index指定位置的元素intindexOf(Objectelement)返回线性表中与指定元素element匹配的第一个元素的下标值,若elenemt不在列表中则返回-1。intlastIndexOf(Objectelement)返回线性表中与指定元素element匹配的最后一个元素的下标值,若elenemt不在列表中则返回-1。ListIteratorlistIterator()返回当前线性表元素的迭代探子ListIteratorlistIterator(intindex)返回当前线性表中从index开始的元素的迭代探子intremove(intindex)删除线性表中指定下标位置index的元素Objectset(intindex,Objectelement)将线性表中指定下标index处的元素替换为elementListsubList(intfromIndex,inttoIndex)返回当前线性表中下标从fromIndex到toIndex的子线性表6.1 List和和ArrayList类类nArrayListArrayList类实现了List接口,它将元素存储在一个动态数组中,存储空间大小可随存储元素的多少进行动态变化。ArrayList提供了三个构造函数:ArrayList()ArrayList(Collectionc)ArrayList(intinitialCapacity)6.1 List和和ArrayList类类例6.1:创建一个空数组列表,在其中顺序添加A、B、C、D、E、F六个对象,并显示该数组列表的内容和大小。然后在该数组列表中添加和删除元素,并将修改后的数组列表内容输出。程序源代码见ArrayListExample.java,运行结果如图6-1。图6-6.1 List和和ArrayList类类nLinkedListLinkedList类也实现List接口,它将元素存储在链表中。LinkedList提供了两个构造函数:LinkedList()LinkedList(Collectionc)6.1 List和和ArrayList类类例6.2创建一个空链接列表,并在其中依次添加1、2、3、4、5共5个元素,显示该链接列表的内容和大小。然后在该链接列表中添加和删除元素,并将修改后的链接列表内容输出。程序源代码见LinkedListExample.java,程序运行结果见图6-2。图6-26.2 Set和和HashSet类类nSet接口扩展了Collection接口,和List接口不同的是,Set定义的集合中不能包含相同的元素。nSet除了继承Collection定义的方法外,本身并没有定义其他的方法。nHashSet类实现了Set接口,由HashSet类声明的集合使用散列表(hashtable),它当中存放的元素并没有特殊的顺序。HashSet提供了四个构造函数:HashSet()HashSet(Collectionc)HashSet(intinitialCapacity)HashSet(intinitialCapacity,floatloadFactor)6.2 Set和和HashSet类类例6.3创建一个散列集,并显示该散列集的内容。程序源代码见HashSetExample.java,程序运行结果见图6-3。图6-36.3 Map和和HashMap类类nMapMap接口用于存储元素和关键字的映射关系,在Map中关键字相当于List中的下标值,用于检索元素的对象。List的下标定义为整数,而在Map中关键字可以定义为任意类型的对象,但必须是唯一的,不能有重复。每个关键字都对应于一个存放在Map对象中的元素,元素的值是可以重复的。Map接口定义的方法见表6-3。6.3 Map和和HashMap类类表6-3Map接口定义的方法方法功能描述voidclear();从当前Map对象中删除所有的关键字和元素booleancontainsKeys(Objectkey);若当前Map对象中包含了key作为关键字,则返回true,否则返回falsebooleancontainsValue(Objectvalue);若当前Map对象中包含了value作为元素值,则返回true,否则返回falseSetentrySet();返回当前Map对象的所有映射的集合视图booleanequals(Objecto);比较对象o和当前Map对象是否相同,若相同则返回true,否则返回falseObjectget(Objectkey);返回当前Map对象中指定关键字为key对应的元素值inthashCode();返回当前Map对象的散列码booleanisEmpty();若当前Map对象是空的则返回true,否则返回falseSetkeySet();返回当前Map对象的所有关键字的集合视图Objectput(Objectkey,Objectvalue);在当前Map对象中将value和关键字key进行关联,若在Map对象中已存在和key关联的元素,则该元素被value替换voidputAll(Mapm);将映射m的内容全部添加到当前Map对象中Objectremove(Objectkey);若关键字key存在于当前Map对象中,则删除该关键字对应的映射内容intsize();返回当前Map对象中“关键字/元素值”对的个数Collectionvalues();返回当前Map对象的所有元素值构成的集合6.3 Map和和HashMap类类nHashMapHashMap类使用散列表来实现Map接口,该类实现了所有Map接口定义的操作,并且允许空值和空关键字存在于对象中。由于使用了散列码,因此在HashMap中并不保证元素的存放顺序和它加入该集合的顺序是一致的。HashMap提供了四个构造函数:HashMap()HashMap(Mapm)HashMap(intinitialCapacity)HashMap(intinitialCapacity,floatloadFactor)6.3 Map和和HashMap类类例6.4创建一个HashMap对象,用它来存放学生的姓名和宿舍房间号,并显示该对象的内容。程序源代码见HashMapExample.java,程序运行结果见图6-4。图6-46.4 Vector类和类和Stack类类nVectorVector和ArrayList类似,也实现List接口,可以用来声明动态数组。与ArrayList不同的是,Vector中包含了同步方法,可以防止两个以上线程同时访问引起的数据冲突。Vector类定义了四个构造函数:Vector()Vector(Collectionc)Vector(intinitialCapacity)Vector(intinitialCapacity,intcapacityIncrement)6.4 Vector类和类和Stack类类例6.5一个简单的Vector类使用示例,程序源代码见VectorExample.java,程序运行结果见图6-5。图6-56.4 Vector类和类和Stack类类nStack Stack类是Vector类的子类,它实现“后进先出”的堆栈。由于Stack类扩展了Vector类,所以Stack除了包含Vector定义的所有方法外,还增加了几种自定义的方法,见表6-4。表6-4Stack类自定义的方法方法功能描述booleanempty()测试该栈是否为空,空则返回TrueObjectpeek()查看位于栈顶的元素并返回该元素Objectpop()将栈顶元素出栈并返回该元素Objectpush(Objecto)将元素o入栈并返回该元素intsearch(Objecto)在栈内查找元素o,若找到则返回该元素在栈内的相对栈顶的距离,若找不到则返回-1。6.4 Vector类和类和Stack类类例6.6使用Stack类将任意输入的字符串逆序输出,程序源代码见StackExample.java,程序运行结果见图6-6.图6-66.5 泛型泛型(generictype)n在例6.4中可以看到如下一段代码:Integerfirst=(Integer)vector.firstElement();/访问vector的第一个元素Stringlast=(String)vector.lastElement();/访问vector的最后一个元素为了保证Integer类型和String类型变量赋值的安全性,必须在此进行类型转换。但是,这种类型转换往往很容易带来混乱和错误。为了避免出现类型转换带来的错误情况,当用户已经明确了集合中的数据都为一种类型时,可以使用Java中的泛型来限定集合中的数据为该确定的数据类型。n假设需要定义一个ArrayList类型的对象,而用户希望该对象中所存放的数据都是String类型,则可以使用以下方法来声明这个对象:ArrayListarraylist=newArrayList();6.5 泛型泛型(generictype)例6.7一个简单的泛型使用示例,程序源代码见GenericTypeExample.java,程序运行结果见图6-7。图6-76.6 Applet小程序小程序nApplet是可通过因特网下载并在接收计算机上运行的一小段程序。n所有的Applet都是属于Java中Applet类的子类。Applet类被包含在java.applet类库中。nApplet并不是在控制台环境的窗口中执行,而是由浏览器或Applet阅读器(appletviewer)执行。6.6 Applet小程序小程序nApplet的常用方法在定义Applet时,可以将它的总体结构表示为:importjava.applet.*;importjava.awt.*;publicclassNewAppletextendsAppletpublicNewApplet()publicvoidinit()publicvoidstart()publicvoidstop()publicvoiddestory()publicvoidpaint(Graphicsg)6.6 Applet小程序小程序nApplet的常用方法init():浏览器首次加载Applet、准备运行时将调用init()方法。start():start()方法在init()方法完成后调用。paint():在Applet开始执行或每次Applet的输出必须重画窗口时(如Applet窗口被缩小再复原时等情况),paint()方法都被调用。stop():用户离开Applet所在的web页面,将Applet挂起时将调用stop()方法。在Applet生命周期结束(用户退出浏览器)、Applet结束之前被调用。6.6 Applet小程序小程序n标记在HTML文档中使用标记可以将Applet嵌入Web页面。标记的描述格式如下:6.6 Applet小程序小程序例6.8在浏览器中调用Applet显示按钮,点击该按钮将在Applet中显示“Itsasimpleapplet!”。程序源代码见SimpleApplet.java。将编译生成的SimpleApplet.class嵌套在网页SimpleApplet.html中,运行结果如图6-8,6-9所示图6-8图6-96.6 Applet小程序小程序nApplet的参数传递要将参数传递给Applet,必须在HTML中使用标记声明和设定参数内容,该标记应嵌入标记中,在Applet初始化时程序可以读取标记声明的内容。标记的描述语法如下:其中“参数值”是一个字符串值。要将标记设定的参数信息读取并传递给Applet程序,需要使用Applet类中的getParameter()方法:publicStringgetParameter(Stringname);该方法以字符串方式返回标记声明的参数名为name的参数值。6.6 Applet小程序小程序例6.9在Applet窗口中显示字符串“AnexampleofJavaApplet”,字符串的字体、颜色、大小和显示的位置均由HTML文件进行设定。Applet程序见AppletParam.java,程序的HTML文件源代码见AppletParam.html。图6-106.6 Applet小程序小程序nJApplet JApplet类位于javax.swing包中,它是java.applet.Applet的一个子类。JApplet继承了Applet类的所有方法,并且支持放置Swing组件。6.7 本章小结本章小结n本章介绍了几种在Java中预定义的常用工具类 List、Set和MapVector和StackJavaApplet的基本知识