Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt

PPT
  • 阅读 102 次
  • 下载 0 次
  • 页数 100 页
  • 大小 304.520 KB
  • 2022-11-12 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt
可在后台配置第一页与第二页中间广告代码
Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt
可在后台配置第二页与第三页中间广告代码
Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt
可在后台配置第三页与第四页中间广告代码
Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt
Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 100
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】Java语言程序设计基础(第2版)对象的串行化和聚集框架ppt.ppt.ppt,共(100)页,304.520 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-2313.html

以下为本文档部分文字说明:

12022/11/12第七讲对象的串行化和聚集框架2022/11/122学习要点•串行化的概念•可串行化对象的建立•串行化的控制•聚集框架的概述•聚集框架中常用类的说明2022/11/123对象串行化概念•对象串行化是指对对象进行存储和恢复的操作•在Java中使用Serializable接

口或Externalizable接口来完成对象的串行化2022/11/124对象串行化的功能•提供一个简单并可扩展的对象流存储机制。支持Java对象持久性存储。•在串行化形式中保存对象类型和安全属性。•支持远程对象的汇集和

分解•支持定制串行化格式。•允许对象预定义自己的外部存储格式2022/11/125可串行化的类•任何实现了Serializable接口的类都是可串行化的类•一个类要实现可串行化,必须实现Serizia

ble接口,同时这个类中所包含的所有其他类也必须实现Serializable接口。2022/11/126定制的可串行化类•定制可串行化类的原因–由于特殊的安全问题,不希望对象的某一部分被串行化–某些对象恢复

后,它包含的某一些对象需要重新创建,此时没有必要对这些对象进行串行化•定制的可串行化类的类型–部分定制的可串行化类–完全定制的可串行化类2022/11/127部分定制的可串行化类•部分定制的可串行化类指只对本身所定义数据的输出格式进行定制的

可串行化类•在串行化类中重写writeObject()和readObject()可实现部分定制串行化–writeObject(ObjectOutputStreams)方法控制要保存的信息–readObject(ObjectI

nputStreams)方法用于实现对象被恢复时对象数据的更新2022/11/128部分定制的可串行化类举例importjava.io.*;importjava.util.*;publicclassEmployeeimplementsS

erializable{intid;Stringname;intage;publicEmployee(){}publicEmployee(intid,Stringname,intage){this.id=id;this.name=name;this.age=age;}2022/11/129

privatevoidwriteObject(ObjectOutputStreamout)throwsIOException{out.writeInt(id);out.writeInt(age);out.writeUT

F(name);}privatevoidreadObject(ObjectInputStreamin)throwsIOException{id=in.readInt();age=in.readInt();name=in.re

adUTF();}}2022/11/1210完全制定的可串行化类•完全制定的可串行化类指所有的数据(包括自己定义的及其父类的数据)的输出格式都进行定制的可串行化类。•完全制定的可串行化类必须实现Externalizable

接口2022/11/1211Externalizable接口•Externalizable接口扩展了Serializable接口•Externalizable接口添加了两个方法–writeExternal()–re

adExternal()•在序列化和重新装配的过程中,Java虚拟机会自动调用这两个方法,执行一些特殊操作2022/11/1212完全定制的可串行化类的要求(1)•必须实现java.io.Externa

lizable接口。•必须实现writeExternal()方法以保存对象的数据或状态。并且该类必须负责把对象的各个超类的数据保存到流中。•必须实现readExternal()方法,该方法从对象流中读取通过writeExternal()方法写入

的对象的数据,同时还必须恢复父类中的数据。2022/11/1213完全定制的可串行化类的要求(2)•如果对象串行化中使用了外部定义的格式,则writeExternal()方法和readExternal()方法都必须

完全依照该格式。•必须定义一个具有public访问权限的不带参数的构造方法2022/11/1214transient关键字•被定义为transient类型的变量在串行化的过程中将不被保存和恢复。•使用transient可以加强串行化过程中的安全性。2022/11/121

5使用Serializable进行串行化的优缺点•内建支持•易于实现•占用空间过大•由于额外的开销导致速度变比较慢2022/11/1216完全定制的可串行化类的优缺点•开销较少(开发者可以决定串行化的具体内容)•可能的速度提升•Java虚拟机不对其

作任何支持,所有操作需要手工完成,实现复杂•容易引起安全问题•在一般情况下,不赞成使用完全定制的可串行化类2022/11/1217串行化对象•将可串行化的对象进行串行化是通过两个类来实现–ObjectInp

utStream:从串行化的对象流中恢复对象,并且通过递归的方法遍历该对象对其它对象的引用,最终恢复对象所有的引用关系–ObjectOutputStream:将可串行化的对象写入字节流2022/11/1218ObjectO

utputStream类•ObjectOutputStream实现了DataOutputStream的接口•ObjectOutputStream中除了基本write(byte[]b)等方法之外,还定义了许多编写基本数据类型的w

riteObject()方法•writeObject()方法在指定的对象不可串行化时,将抛出NotSerializableException类型的例外。2022/11/1219ObjectOutputStream中的write方法

(1)•write(byte[]buf);写一个字节数组;•write(byte[]buf,intoff,intlen);写一个字节数组的一部分;•write(intval);写一个字节;•writeBoolean(B

ooleanval);写一个布尔值•writeByte(intval);写一个8位字节•writeChar(intval);写一个16位字节•writeChars(Stringstr);写一个16位字符串20

22/11/1220ObjectOutputStream中的write方法(2)•writeDouble(doubleval);写一个64位double型数值•writeFloat(floatval);写一个32

位float型数值•writeInt(intval);写一个32位int型数值•writeLong(longval);写一个64位long型数值•writeShort(intval);写一个16位short型数值•writeUTF(Stringstr);采用

UTF格式写一个字符串2022/11/1221ObjectInputStream类•ObjectInputStream实现了java.io.DataInput接口。•ObjectInputStream中除了定义了基本read()等方法之外,还定义了许多读基

本数据类型的readObject()方法2022/11/1222ObjectOutputStream举例publicclassTestimplementsSerializable{……}publicclassW

riteTest{publicstaticvoidmain(String[]args){ObjectOutputStreamout=newObjectOutputStream(newFileOutputStream(“test.txt"));Testtest=newTest();out.writ

eObject(zorcon);}建立一个可串行化的类2022/11/1223ObjectInputStream举例publicclassThawAlien{publicstaticvoidmain(String[]args){ObjectI

nputStreamin=newObjectInputStream(newFileInputStream(“test.txt"));Objectmystery=in.readObject();System.out.println(mystery.getClass().toString());}}2

022/11/1224ObjectInputStream中的read方法(1)•read();读当前对象;•read(byte[]buf,intoff,intlen);读一个字节数组的一部分;•readBoolean();读一个布尔值;•readByte();读一个8位

字节;•readChar();读一个16位字节;•readDouble();读一个64位double型数值2022/11/1225ObjectInputStream中的read方法(2)•readFloat();读一个32位float型数值•readInt();读一个32位int型数值•readL

ong();读一个64位long型数值•readShort();读一个16位short型数值•readUTF();采用UTF格式读一个字符串2022/11/1226对象串行化的注意点(1)•在对象进行串行化时,只保存对象的非静态成员变量的值。•变量的任何修饰符都不保存。•任何成员的方法和

静态变量也不保存2022/11/1227对象串行化时的注意点(2)•在实现Serializable接口的类中,不对transient变量保存,通过transient可以使某些数据不被串行化•可串行化类的数据访问权限(public,protected或private)对于数据的串行化没有影响

•数据是以字节的形式写入流而字符串型数据将表示为UTF格式2022/11/1228串行化中对敏感信息的保护•必须保证对象的敏感数据不能从流中恢复,或者敏感数据在恢复后要由类进行某些验证•把类中包含敏感数据的成员变量定义为transient类型

2022/11/1229串行化的必要性•串行化机制能自动补偿操作系统间的差异•串行化机制为“远程方法调用”(RMI)提供了支持•对象的序列化也是JavaBeans的一个重要特性•使用串行化可以实现对象状态的“永久保存”2022/11/1230什

么是聚集框架•聚集框架是对对象组进行表示和操作的一套标准工具类•聚集框架由三部分组成–核心接口:是聚集独立操作的实现–一套实现接口的类:程序可方便利用的一套数据结构–一套工具方法:为完成聚集中各种操作。如排序、检索和定制聚集2022/11/123

1聚集框架的核心接口•核心接口定义了聚集的公共功能和聚集间数据交换的方法。•核心接口是整个聚集框架的核心部分,接口类型如下图所示2022/11/1232Collection•Collection是核心接口中最基本的接口•所有实现了Collection的类都具有以下

基本的构造方法。–无参数的构造方法,用以构造一个元素个数为0的Collection类型的对象。–以Collection类型的对象为参数的构造方法,用以构造一个包含与参数元素相同的Collection类型对象。2022

/11/1233Set•Set是Collection接口的直接子接口,实现Set接口的所有的子类除了具有Collection接口的特征外,还包含以下特征:–Set内部的对象不存在一定的顺序。–Set接口规定了包含在其中的对象不允许重复及包含在Set中的任意

两个对象e1和e2不存在e1.equals(e2)的结果为true的情况2022/11/1234List•List为Collection的另一个直接子接口,实现List接口的所有子类除了具有Collection的特征外还具有以下特征:–包含在L

ist内部的对象可以相等,即包含在List内部的两个对象e1和e2允许存在e1.equals(e2)结果为true的情况–包含在List内部的对象按照元素插入的顺序排列,通过索引可以查找对应位置的对象2022/11/1235Hash表•Hash表是一种数据结构,用来查找对象。•Has

h表为每个对象计算出一个整数,称为HashCode(哈希码)。•Hash表是个链接式列表的阵列。每个列表称为一个buckets(哈希表元)。•Hash表中对象位置的计算–index=HashCode%bucket

s(HashCode为对象哈希码,buckets为哈希表元总数)。2022/11/1236向Hash表中添加元素•HashCollisions(哈希冲突):当添加元素时,计算的index位置上已经保存了其它的元素。–定义足够大的空间将减少哈西冲突的数量–初始哈希

表元的数量:buckets=size*150%+1•rehashing(再哈希):当Hash表已经没有剩余空间时,建立新哈希表元,大小增加为原有哈希表元的固定倍数,并将原有的对象重新导入新的哈希表元中,而原始的哈希表元被删除。–固定的倍数为loadfactor(加载

因子)2022/11/1237影响Hash表性能的参数•initialCapacity:Hash表的初始空间•loadfactor:Hash表的加载因子•Java中默认的initalCapacity为11默认的加载因子为0.

752022/11/1238Map•Map是一类包含键(key)-值(Value)对的集合。–Map中可以通过“键”来获取相对应的“值”–Map中的“键”不允许重复–Map通过“键”最多只可以找到一个对应的值•Map.Entry:Map中包含的每一个键-值对称为一个Map.Entry20

22/11/1239Comparable接口•在java.lang包中,Comparable接口用于对对象的排序•假定集合众的元素是同一类型,元素实现了Comparable接口,集合中的元素可以排序成

自然顺序。•compareTo(Objecto):比较当前实例对象与对象o,如果位于对象o之前,返回负值,如果两个对象在排序中位置相同,则返回0,如果位于对象o后面,则返回正值2022/11/1240实现Comparable接口

的类•Java2SDK版本1.4中有二十四个类实现Comparable接口。•以下展示了8种基本类型的自然排序。–BigDecimal,BigInteger,Byte,Double,Float,Integer,Long,Short按数字大小排序–Charac

ter按Unicode值的数字大小排序–String按字符串中字符Unicode值排序2022/11/1241Comparator接口•对于没有实现Comparable接口的类、或者自定义的类,可以通过Comparator接口自定义比较方式2022/11/1242可比

较的对象•两个对象e1和e2可比较必须具有以下属性–e1和e2实现了Comparable接口或者Comparator接口–e1.compareTo(e2)或者Comparator.compare(e1,e2)不抛出ClassCastException2022/1

1/1243SortedSet•SortedSet是Set接口的直接子接口,它的特征为:–内部的对象按照一定的排列规则排列–所有包含在SortedSet内部的对象是可比较的2022/11/1244SortedM

ap•SortedMap为Map的直接子接口,它的特征为–包含在其中的键——值对中的键值将按照一定的排列规则排列–包含在其中的键(key)是可比较的2022/11/1245Iterator•Iterator接口的作用是遍历Collection中的所有

元素•Collection以通过方法:iterator()来获取当前Collection的Iterator实例2022/11/1246Iterator中的方法•hasNext():判断当前的Iterator中是否还有元素存在

•next():返回Iterator中的下一个元素•remove():将Iterator最后调用的一个元素从产生Iterator的Collection类中删除2022/11/1247Iterator举例List

list=newArrayList();//addsomeelementsIteratorelements=list.iterator();while(elements.hasNext()){System.out.pri

ntln(elements.next());}2022/11/1248Collection接口相关的接口和类CollectionsetListAbstractCollectionSortedSetAbstractSetTr

eeSetHashSetAbstractListArrayListVectorAbstractSequentialListStackLinkedList2022/11/1249比较常用的和Collection相关的类•ArrayList•LinkedList•HashSet•Ve

ctor•Stack•TreeSet2022/11/1250ArrayList•ArrayList实现了List接口•ArrayList允许任何对象类型的数据作为它的元素•ArrayList允许null作为它的元素•ArrayList是线程不安全的。即它不支持

多线程。2022/11/1251ArrayList的构造方法•ArrayList():构造一个空的ArrayList对象,同时为其分配一个默认大小的容量•ArrayList(Collectionc):构造一个和参数c中具有相同元素的ArrayLi

st对象•ArrayList(intinitialCapacity):构造一个空的ArrayList对象,同时为其分配大小为initialCapacity的容量。2022/11/1252ArrayList中的主要方法•add

(intindex,Objectelement):在ArrayList的index位置上添加一个元素。•add(Objecto):向ArrayList的末尾添加一个元素•addAll(Collectionc):将c中的内容添加到ArrayList的末尾•clear():清

除ArrayList中的所有的元素•contains(Objectelem):判断当前的对象是否在ArrayList中•get(intindex):获取ArrayList中位于index位置的元素2022/11/1253Arra

yList中的方法•indexOf(Objectelem):•isEmpty():判断ArrayList中是否存在元素•remove(intindex):清除ArrayList中位于index位置的元素•set(intindex,Objectelement):将ArrayList中位于in

dex位置的元素替换为当前对象•size():获取ArrayList中包含元素的个数•toArray():返回一个包含ArrayList中所有元素的数组2022/11/1254LinkedList•LinkedList实

现了List接口•LinkedList允许任何对象类型的数据作为它的元素•LinkedList允许null作为它的元素•LinkedList是线程不安全的•LinkedList中添加了针对初始元素和结束元素的get和set等等的操作•LinkedList通常可以当作队

列、双端队列和堆栈等等的结构使用2022/11/1255LinkedList的构造方法•LinkedList():构造一个空的LinkedList对象•LinkedList(Collectionc):

构造一个包含与c中相同的元素的LinkedList对象2022/11/1256LinkedList中与首尾元素相关方法•addFirst(Objecto):将当前元素添加到LinkedList的首位置上•addLast(Objecto):将当前元素添加到LinkedList

的末尾•getFirst():获取LinkedList中首位置的元素•getLast():获取LinkedList中末尾位置的元素•removeFirst():删除LinkedList中首位置的元素•removeLast():删除LinkedList中末尾位置的元素2

022/11/1257HashSet•HashSet执行了Set接口,同时以哈希表为基础•HashSet对存入其中的元素不进行排序•HashSet允许存入其中的元素为空•HashSet中的元素不允许重复•如果HashSet中保存的元素较多时,其访问速度会强于List2022/11/12

58HashSet的构造方法•HashSet():定义一个空的HashSet对象,同时为其分配默认的初始容量,使用默认的加载因子•HashSet(Collectionc):定义一个具有和给定的Collection中具有相同元素的HashSet对象,同时为其分配默认的初

始容量,使用默认的加载因子•HashSet(intinitialCapacity):定义一个空的HashSet对象,同时为其分配指定的初始容量•HashSet(intinitialCapacity,floatloadFactor):定义一个空的HashSet对象,同时为其分配指定

的初始容量,使用指定的加载因子2022/11/1259HashSet中的方法•add(Objecto):向HashSet中添加对象•clear():将HashSet中的所有对象清空•contains(Objecto):判断HashSet中是否存在给定对象•isEmpty():判

断HashSet中是否存在元素•remove(Objecto):将给定的元素从HashSet中删除•size():获取HashSet中元素的个数2022/11/1260Vector•Vector实现了List接口•Vector的大小可以在元素进行添加和删除

时根据需要自动进行扩充和缩减•Vector是线程安全的2022/11/1261Vector的构造方法•Vector():创建一个元素个数为0的Vector对象,并为其分配默认大小的初始容量•Vector(intsize):创建一个元素个数为0的Vector对象,并为其分配大小为size的初始

容量•Vector(intsize,intincr):创建一个元素个数为0的Vector对象,为其分配大小为size的初始容量,并指定当Vector对象溢出时自动增加大小为incr的容量。•Vector(Collectionc

):创建一个包含了聚集c中元素的Vector对象。2022/11/1262Vector中的方法•add(intindex,Objectelement):将element添加到index位置上•add(Objecto):将对象添加到Vector的末尾•addAll(Co

llectionc):将c中所有的元素添加到Vector的末尾•addAll(intindex,Collectionc):将c中所有的元素添加到index位置上•addElement(Objectobj):将对象添加到Vector的末尾•contai

ns(Objectelem):判断Vector中是否包含当前元素2022/11/1263Vector中的方法•containsAll(Collectionc):判断Vector中是否包含c中包含的所有元素•copyInto(Object[]anArray)

:将Vector中的所有元素保存到给定的数组中•elementAt(intindex):获取位于Vector中index位置的元素•firstElement():获取Vector中排列在第一位的元素•get(intindex):获取Vector

中index位置上的元素•indexOf(Objectelem):获取当前对象在Vector中的位置索引2022/11/1264Vector中的方法•indexOf(Objectelem,intindex):获取当

前对象在Vector中index位置之后的位置索引•insertElementAt(Objectobj,intindex):将对象插入到Vector的指定位置上•remove(Objecto):从Vector中删除指定的元素•remove(in

tindex):从Vector中删除指定位置的元素•removeAllElements():删除Vector中的所有元素•setElementAt(Objectobj,intindex):将Vectory中index位置上的元素替换为指定对象•size():获取

Vector中所包含的元素的个数•toArray():返回由Vector中所有元素组成的数组2022/11/1265Vector使用举例importjava.util.*;publicclassVectorExample{publ

icstaticvoidmain(Stringargs[]){Vectorv=newVector(2,1);System.out.println("向量初始大小:"+v.size());System.out.println("向量初始容量:"+v.capacity());v.

addElement(newInteger(1));v.addElement(newInteger(2));v.addElement(newInteger(3));2022/11/1266v.addElement(newInteger(4));System

.out.println("加4个整数元素后的容量:"+v.capacity());v.addElement(newDouble(5.45));System.out.println("当前容量:"+v.capacity());v.addElement(ne

wDouble(6.08));v.addElement(newInteger(7));System.out.println("当前容量:"+v.capacity());v.addElement(newFloat(9.4));v.addElement(newInteger(10));System

.out.println("当前容量:"+v.capacity());2022/11/1267v.addElement(newInteger(11));v.addElement(newInteger(12));S

ystem.out.println("第1个元素:"+(Integer)v.firstElement());System.out.println("最后一个元素:"+(Integer)v.lastElement());if(v.contai

ns(newInteger(3))){System.out.println("向量容量3.");}}2022/11/1268Stack•Stack是Vector的子类•Stack为实现堆栈last-in-first-out(LIF

O)的类2022/11/1269Stack中跟堆栈相关的方法•empty():判断当前的Stack中是否有元素存在•peek():读取处于栈顶位置的元素,但不把元素从堆栈中取出•pop():读取处于栈顶位置的元素,

同时将其从堆栈中删除•push(Objectitem):将当前元素加入到栈顶的位置•search(Objecto):返回当前对象在堆栈中的位置2022/11/1270Stack举例importjava.util.*;publicclassStackExample{staticStri

ng[]months={"January","Fenruary","March","April","May","June","July","August","September","October","November","December

"};publicstaticvoidmain(String[]args){Stackstk=newStack();2022/11/1271for(inti=0;i<months.length;i++){stk.push(months[i]+"")

;}System.out.println("stk="+stk);stk.addElement("最后一行");System.out.println("元素5="+stk.elementAt(5));System.out.println("弹出元

素:");while(!stk.empty())System.out.println(stk.pop());}}2022/11/1272TreeSet•TreeSet实现了SortedSet接口•TreeSet对加入其中的元素按照某种规则进行升

序排列•TreeSet允许添加空元素•TreeSet是线程不安全的•所有添加到TreeSet的元素必须是可比较的2022/11/1273TreeSet的构造方法•TreeSet():构造一个空的TreeSet•TreeSet(Collectionc):构造一个和给定的Collection中具有

相同元素的TreeSet对象,同时为其中的元素按照升序排列•TreeSet(Comparatorc):构造一个空的TreeSet,并为其规定排序规则•TreeSet(SortedSets):构造一个和给定的SortedSet具有相同元素、同时具有

相同的排序规则的treeSet对象。2022/11/1274TreeSet中的方法•add(Objecto):向TreeSet对象中添加一个元素•addAll(Collectionc):将Collection中的所

有的元素添加到TreeSet对象中•clear():删除TreeSet中的所有元素•comparator():返回Collection中的排列规则对象(Comparator)•contains(Objecto):判断

TreeSet对象中是否包含当前对象•first():返回TreeSet中排列在首位的元素•headSet(ObjecttoElement):返回由TreeSet中所有小于给定对象的元素组成的SortedSet对象2022/11/1275TreeSet中的

方法•isEmpty():判断TreeSet对象中元素个数是否为0•last():返回TreeSet中排列在末尾的元素•remove(Objecto):从TreeSet对象中删除指定元素•size():返回TreeSet元素中的元素个数•subSet(Objec

tfromElement,ObjecttoElement):返回由TreeSet中所有大于fromElement,同时小于toElement的元素组成的SortedSet对象•tailSet(ObjectfromElement):返回由TreeSet中所有大于给定对象的元素组成的So

rtedSet对象2022/11/1276Map接口相关的接口和类MapSortedMapAbstractMapHashMapLinkedHashMapTreeMapHashtableTableWeakHashMap2022/11

/1277比较常用的与Map接口相关的类•HashMap•Hashtable•LinkedHashMap•TreeMap2022/11/1278HashMap•HashMap执行了Map接口•HashMap允许键(

Key)为空和值(Value)为空•HashMap为线程不安全的,即不支持多线程•HashMap以Hash表为基础构建2022/11/1279HashMap的构造方法•HashMap():创建一个空HashMap对象,并为其分配默认的初始容量和加载因子•HashMap(

intinitialCapacity)创建一个空HashMap对象,并为其分配指定的初始容量•HashMap(intinitialCapacity,floatloadFactor):创建一个空HashMap对象,并为其分配指定的初始容量和加载因子•HashM

ap(Mapm):创建一个与给定Map对象具有相同键-值对的HashMap对象2022/11/1280HashMap中的主要的方法•clear():清空HashMap中所有的键-值对•containsKey(Objectkey):判断HashMap对象中是否存在给定的键

•containsValue(Objectvalue):判断HashMap对象中是否存在给定的值•get(Objectkey):返回和给定的键相对应的值•isEmpty():判断HashMap对象中是否存在键-值对•keySet():获取由HashMa

p中所有的键组成的Set对象2022/11/1281HashMap中的主要方法•put(Objectkey,Objectvalue):向HashMap对象中添加键-值对•putAll(Mapt):将给定Map中所有的键-值对添加到HashMap中•remove(Objectkey):将键为给定值

的键-值对从HashMap中删除•values():获取由HashMap中所有的值组成的Collection对象2022/11/1282Hashtable•Hashtable执行了Map接口•Hashtable以Hash表为基础构建•Hashtable和HashMap在执

行过程中具有一定的相似性•Hashtable和HashMap最根本的区别为:Hashtable中不允许空元素,即键和值都不允许为空•Hashtable是线程安全的2022/11/1283Hashtable中的构造方法•Hashtable():创建一个空Hashta

ble对象,并为其分配默认的初始容量和加载因子•Hashtable(intinitialCapacity)创建一个空Hashtable对象,并为其分配指定的初始容量•Hashtable(intiniti

alCapacity,floatloadFactor):创建一个空Hashtable对象,并指定其初始容量和加载因子•Hashtable(Mapm):创建一个与给定Map对象具有相同键-值对的Hashtable对象2022/11/1284Hashtable中的方法•clear():清除Has

htable对象中所有的键-值对•contains(Objectvalue):判断Hashtable中是否存在给定的值•containsKey(Objectkey):判断Hashtable中是否存在给定的键•containsValue(Objectvalu

e):判断Hashtable是否存在某键和给定的对象相对应•elements():返回由Hashtable中所有的值组成的Enumeration对象•entrySet():返回由Hashtable中的键-值对组成的Set对象•get(Objectkey):返回和

指定的键相对应的值2022/11/1285Hashtable中的方法•isEmpty():判断Hashtable中是否含有键-值对•keys():返回由Hashtable中的键组成的Enumeration对象•keySet():返回由Hash

table中的键组成的Set对象•put(Objectkey,Objectvalue):向Hashtable中添加键-值对•putAll(Mapt):将给定的Map中所有的键-值对添加到Hashtable中•remove(Object

key):删除给定键的键-值对•size():返回Hashtable中键-值对的个数•values():返回由Hashtable中的值组成的Collection对象2022/11/1286Hashtable举例importjava.util.*;p

ublicclassHashtable1{publicstaticvoidmain(Stringargs[]){Hashtablebalance=newHashtable();Enumerationname

s;Stringstr;doublebal;balance.put("王向东",newDouble(3434.34));balance.put("李闵",newDouble(123.22));balance.put("赛书生",newDou

ble(1378.00));2022/11/1287names=balance.keys();while(names.hasMoreElements()){str=(String)names.nextElement();System.out.println(str+":"+balance.ge

t(str));}System.out.println();bal=((Double)balance.get("李闵")).doubleValue();balance.put("李闵",newDouble(bal+1000));Syst

em.out.println("李闵的新余额:"+balance.get("李闵"));}}2022/11/1288LinkedHashMap•LinkedHashMap是HashMap的子类•LinkedHashMap对保存在其中的键-值对有两种排列方式–按照元素插入的顺序

排列–按照元素被访问的顺序排列:对于实现高速缓存的“删除最近最少使用”的原则很有用2022/11/1289LinkedHashMap的构造方法•LinkedHashMap():创建一个空LinkedHashtable对象,并为其分配默认的初

始容量和加载因子•LinkedHashMap(Mapm):构建一个与给定的Map具有相同键-值对的LinkedHashMap对象•LinkedHashMap(intinitialCapacity):创建一个空LinkedHashtable对象,并为其

指定初始容量•LinkedHashMap(intinitialCapacity,floatloadFactor):创建一个空LinkedHashtable对象,并指定其初始容量和加载因子2022/11/1

290LinkedHashMap的构造方法•LinkedHashMap(intinitialCapacity,floatloadFactor,booleanaccessOrder):创建一个空LinkedHashtable对象,并指定其初始容量和加载因子和排列方法–如果将accessOrd

er设置为true,LinkedHashMap将使用访问顺序排列包含在其中的元素–如果将accessOrder设置为false,LinkedHashMap将使用插入顺序排列包含在其中的元素。2022/11/1291LinkedHashMap中的方法•clear():删除LinkedHashMap

中所有的元素•containsValue(Objectvalue):判断LinkedHashMap中是否存在给定的元素•get(Objectkey):从LinkedHashMap中获取与给定键相对应的值2022/11/1292LinkedHashMap中的方法•r

emoveEldestEntry(Map.Entryeldest):–方法返回是否需要将最老(最少被访问)的键-值对从LinkedHashMap中删除–它默认的返回值为false,即默认条件下不删除“老”的键

-值对–方法在put()方法和putAll()方法调用后自动被调用–可以重新定义本方法,以便有选择地在最老的键-值对符合某个条件,或者映像超过了某个大小时,返回true。2022/11/1293WeakHashMap•WeakHashMap实现了Map接口,它是Map的一个特殊实现,–

它使用WeakReference(弱引用)来存放键。–使用这种方式时,当WeakHashMap中的键在WeakHashMap的外部不再被引用时,这个键-值对将从WeakHashMap中删除,同时垃圾收集器将把它回收2022

/11/1294WeakHashMap中的构造方法•WeakHashMap():创建一个空HashMap对象,并为其分配默认的初始容量和加载因子•WeakHashMap(intinitialCapacity)创建一个空WeakHashMap对象,并为其分配指定的初始容量•We

akHashMap(intinitialCapacity,floatloadFactor):创建一个空WeakHashMap对象,并为其分配指定的初始容量和加载因子•WeakHashMap(Mapm):创建一个与给定Map对象具有相同键-值对的WeakHashMap对象2022/11/12

95WeakHashMap中的方法•clear():删除WeakHashMap中所有的元素•containsKey(Objectkey):判断WeakHashMap中是否存在给定的键•containsValue(Objectvalue):判断WeakHashMap中是否

存在给定的值•entrySet():返回由WeakHashMap中所有的键-值对组成的Set对象•get(Objectkey):返回WeakHashMap中的与给定键相对应的值•isEmpty():判断WeakHashMap中是否存在键-值对•keySet()

:返回由WeakHashMap中的键组成的Set对象2022/11/1296WeakHashMap中的方法•put(Objectkey,Objectvalue):将给定的键-值对保存到WeakHashMap中•putAll(Mapt):将给定的M

ap对象中所有的键值对保存到WeeakHashMap中•remove(Objectkey):将与给定的键相同的键-值对从WeakHashMap中删除•size():返回WeakHashMap中的键值对的个数•values():返回

由WeakHashMap中所有的值组成的Collection对象。2022/11/1297TreeMap•TreeMap实现了SortedMap接口•TreeMap和实现Map的其它对象不同的是:它不具有调优选项。•TreeMap

中所有的元素必须是可比较的•TreeMap是线程不安全的2022/11/1298TreeMap的构造方法•TreeMap():构造一个空的TreeMap对象•TreeMap(Mapm):构造一个具有和给定Map相同键-值对的TreeMap对

象•TreeMap(Comparatorc):构造一个空的TreeMap对象,并且规定特定的排列方式•TreeMap(SortedMaps):构造一个与给定的SortedMap具有相同键-值对,相同的排列规则的TreeMap对象2022/11

/1299TreeMap和比较相关的方法•comparator():返回TreeMap中的排列规则•containsKey(Objectkey):判断TreeMap中是否存在给定的键•firstKey():返回TreeMap中排列在首位的键•he

adMap(ObjecttoKey):返回由TreeMap中所有大于给定键的所有键-值对组成的SortedMap对象2022/11/12100TreeMap中和比较相关的方法•lastKey():返回TreeMap中

排列在末尾的键•subMap(ObjectfromKey,ObjecttoKey):返回由TreeMap中处于给定值之间的键-值对组成的SortedMap对象•tailMap(ObjectfromKey):返回由TreeMap中键小于给定值的键值对组成的Sorted

Map对象

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 17190
  • 被下载 8
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?