【文档说明】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接口的类都是可串行化的类•一个类要实现可串行化,必须实现
Seriziable接口,同时这个类中所包含的所有其他类也必须实现Serializable接口。2022/11/126定制的可串行化类•定制可串行化类的原因–由于特殊的安全问题,不希望对象的某一部分被串行化–某些对象恢复
后,它包含的某一些对象需要重新创建,此时没有必要对这些对象进行串行化•定制的可串行化类的类型–部分定制的可串行化类–完全定制的可串行化类2022/11/127部分定制的可串行化类•部分定制的可串行化类指只对本身所定义数据的输出格式进行定制的可串行化类•在串行化类中重写writ
eObject()和readObject()可实现部分定制串行化–writeObject(ObjectOutputStreams)方法控制要保存的信息–readObject(ObjectInputStreams)方法用于实现对象被恢复时对象数据
的更新2022/11/128部分定制的可串行化类举例importjava.io.*;importjava.util.*;publicclassEmployeeimplementsSerializable{intid;
Stringname;intage;publicEmployee(){}publicEmployee(intid,Stringname,intage){this.id=id;this.name=name;this.age=age;}2022/11/129privatev
oidwriteObject(ObjectOutputStreamout)throwsIOException{out.writeInt(id);out.writeInt(age);out.writeU
TF(name);}privatevoidreadObject(ObjectInputStreamin)throwsIOException{id=in.readInt();age=in.readInt();name=in.readUTF();}}2022/11/1210完全制定的可串行化
类•完全制定的可串行化类指所有的数据(包括自己定义的及其父类的数据)的输出格式都进行定制的可串行化类。•完全制定的可串行化类必须实现Externalizable接口2022/11/1211Externalizable接口•Externalizabl
e接口扩展了Serializable接口•Externalizable接口添加了两个方法–writeExternal()–readExternal()•在序列化和重新装配的过程中,Java虚拟机会自动调用这两个方法,执行一些特殊操作2022/11
/1212完全定制的可串行化类的要求(1)•必须实现java.io.Externalizable接口。•必须实现writeExternal()方法以保存对象的数据或状态。并且该类必须负责把对象的各个超类的数据保存到流中。•必须实
现readExternal()方法,该方法从对象流中读取通过writeExternal()方法写入的对象的数据,同时还必须恢复父类中的数据。2022/11/1213完全定制的可串行化类的要求(2)•如果对象串行化中使用
了外部定义的格式,则writeExternal()方法和readExternal()方法都必须完全依照该格式。•必须定义一个具有public访问权限的不带参数的构造方法2022/11/1214transient关键字•被定义为transient类型的变量
在串行化的过程中将不被保存和恢复。•使用transient可以加强串行化过程中的安全性。2022/11/1215使用Serializable进行串行化的优缺点•内建支持•易于实现•占用空间过大•由于额外的开销导致速度变比较慢2022/11/1216完全定制的可串行化类的优缺点•开
销较少(开发者可以决定串行化的具体内容)•可能的速度提升•Java虚拟机不对其作任何支持,所有操作需要手工完成,实现复杂•容易引起安全问题•在一般情况下,不赞成使用完全定制的可串行化类2022/11/1217串行化对象•将可串行
化的对象进行串行化是通过两个类来实现–ObjectInputStream:从串行化的对象流中恢复对象,并且通过递归的方法遍历该对象对其它对象的引用,最终恢复对象所有的引用关系–ObjectOutputStream:将可串行化的对象写入字节流2022/11/1218ObjectOutputS
tream类•ObjectOutputStream实现了DataOutputStream的接口•ObjectOutputStream中除了基本write(byte[]b)等方法之外,还定义了许多编写基本数
据类型的writeObject()方法•writeObject()方法在指定的对象不可串行化时,将抛出NotSerializableException类型的例外。2022/11/1219ObjectOutputStream中的write方法(1)•write(byte[]buf);写一个
字节数组;•write(byte[]buf,intoff,intlen);写一个字节数组的一部分;•write(intval);写一个字节;•writeBoolean(Booleanval);写一个布尔值•writeByte(intval);写一个8
位字节•writeChar(intval);写一个16位字节•writeChars(Stringstr);写一个16位字符串2022/11/1220ObjectOutputStream中的write方法(2)•write
Double(doubleval);写一个64位double型数值•writeFloat(floatval);写一个32位float型数值•writeInt(intval);写一个32位int型数值•writeLong(l
ongval);写一个64位long型数值•writeShort(intval);写一个16位short型数值•writeUTF(Stringstr);采用UTF格式写一个字符串2022/11/1221ObjectInputStream类•ObjectInputStream实现了
java.io.DataInput接口。•ObjectInputStream中除了定义了基本read()等方法之外,还定义了许多读基本数据类型的readObject()方法2022/11/1222ObjectOutputStream举例publicc
lassTestimplementsSerializable{……}publicclassWriteTest{publicstaticvoidmain(String[]args){ObjectOutputStreamou
t=newObjectOutputStream(newFileOutputStream(“test.txt"));Testtest=newTest();out.writeObject(zorcon);}建立一个可串行化的类2022/11/1223ObjectIn
putStream举例publicclassThawAlien{publicstaticvoidmain(String[]args){ObjectInputStreamin=newObjectInputStream(newFileInputStream(“test.txt"))
;Objectmystery=in.readObject();System.out.println(mystery.getClass().toString());}}2022/11/1224ObjectInputStream中的read方法(1)•read();读当前对象;
•read(byte[]buf,intoff,intlen);读一个字节数组的一部分;•readBoolean();读一个布尔值;•readByte();读一个8位字节;•readChar();读一个16位字节;•readDouble();读一个64位double型数值2022/11/1225
ObjectInputStream中的read方法(2)•readFloat();读一个32位float型数值•readInt();读一个32位int型数值•readLong();读一个64位long型数值•readShor
t();读一个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/1
1/1231聚集框架的核心接口•核心接口定义了聚集的公共功能和聚集间数据交换的方法。•核心接口是整个聚集框架的核心部分,接口类型如下图所示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的特征外还具有以下特征:–包含在List内部的对象可以相等,即包含在List内部的两个对象e1和e2允许存在e1.equals(e2)结果为true的情况–包含在List内部的对象按照元素插入的顺序排列,通过索引可以查找对应位置的对象2022/11/123
5Hash表•Hash表是一种数据结构,用来查找对象。•Hash表为每个对象计算出一个整数,称为HashCode(哈希码)。•Hash表是个链接式列表的阵列。每个列表称为一个buckets(哈希表元)。•Hash表
中对象位置的计算–index=HashCode%buckets(HashCode为对象哈希码,buckets为哈希表元总数)。2022/11/1236向Hash表中添加元素•HashCollisions(哈希冲突):当添加元素时,计算的index位置上已经保存了其它的元素。
–定义足够大的空间将减少哈西冲突的数量–初始哈希表元的数量:buckets=size*150%+1•rehashing(再哈希):当Hash表已经没有剩余空间时,建立新哈希表元,大小增加为原有哈希表元的固定倍数,并将原有的对象重新导
入新的哈希表元中,而原始的哈希表元被删除。–固定的倍数为loadfactor(加载因子)2022/11/1237影响Hash表性能的参数•initialCapacity:Hash表的初始空间•loadfactor:Hash表的加载因子•Java中默认的initalCapac
ity为11默认的加载因子为0.752022/11/1238Map•Map是一类包含键(key)-值(Value)对的集合。–Map中可以通过“键”来获取相对应的“值”–Map中的“键”不允许重复–Map通过“键”最多只可以找到一个对应的值•M
ap.Entry:Map中包含的每一个键-值对称为一个Map.Entry2022/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按数字大小排序–C
haracter按Unicode值的数字大小排序–String按字符串中字符Unicode值排序2022/11/1241Comparator接口•对于没有实现Comparable接口的类、或者自定义的类,可以通过
Comparator接口自定义比较方式2022/11/1242可比较的对象•两个对象e1和e2可比较必须具有以下属性–e1和e2实现了Comparable接口或者Comparator接口–e1.compareTo(e2)或者Comparator.compare(e1,e2)不抛出C
lassCastException2022/11/1243SortedSet•SortedSet是Set接口的直接子接口,它的特征为:–内部的对象按照一定的排列规则排列–所有包含在SortedSet内部的对象是可比较的2022/11/1244SortedMap•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举例Listlist=newArrayList();//addsomeeleme
ntsIteratorelements=list.iterator();while(elements.hasNext()){System.out.println(elements.next());}2022/11/1
248Collection接口相关的接口和类CollectionsetListAbstractCollectionSortedSetAbstractSetTreeSetHashSetAbstractListArrayListVectorAbstractSequenti
alListStackLinkedList2022/11/1249比较常用的和Collection相关的类•ArrayList•LinkedList•HashSet•Vector•Stack•TreeSet2022/11/1250ArrayList•ArrayList实现了List接口•
ArrayList允许任何对象类型的数据作为它的元素•ArrayList允许null作为它的元素•ArrayList是线程不安全的。即它不支持多线程。2022/11/1251ArrayList的构造方法•ArrayList(
):构造一个空的ArrayList对象,同时为其分配一个默认大小的容量•ArrayList(Collectionc):构造一个和参数c中具有相同元素的ArrayList对象•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/1253ArrayList中的方法•indexOf(Objectelem):•isE
mpty():判断ArrayList中是否存在元素•remove(intindex):清除ArrayList中位于index位置的元素•set(intindex,Objectelement):将ArrayList中位于index位置的元
素替换为当前对象•size():获取ArrayList中包含元素的个数•toArray():返回一个包含ArrayList中所有元素的数组2022/11/1254LinkedList•LinkedList实现了List接口•Linke
dList允许任何对象类型的数据作为它的元素•LinkedList允许null作为它的元素•LinkedList是线程不安全的•LinkedList中添加了针对初始元素和结束元素的get和set等等的操作•LinkedList通常可以当作队列、双端队列和堆栈等等的结构使用2022/11/1255
LinkedList的构造方法•LinkedList():构造一个空的LinkedList对象•LinkedList(Collectionc):构造一个包含与c中相同的元素的LinkedList对象2022/11/1256Lin
kedList中与首尾元素相关方法•addFirst(Objecto):将当前元素添加到LinkedList的首位置上•addLast(Objecto):将当前元素添加到LinkedList的末尾•getFirst():获取Linked
List中首位置的元素•getLast():获取LinkedList中末尾位置的元素•removeFirst():删除LinkedList中首位置的元素•removeLast():删除LinkedList中末尾位置
的元素2022/11/1257HashSet•HashSet执行了Set接口,同时以哈希表为基础•HashSet对存入其中的元素不进行排序•HashSet允许存入其中的元素为空•HashSet中的元素不允许重复•如果HashSet中保存的元素较多时,其访问速度会强于List2022/11/12
58HashSet的构造方法•HashSet():定义一个空的HashSet对象,同时为其分配默认的初始容量,使用默认的加载因子•HashSet(Collectionc):定义一个具有和给定的Collection中具有相同元素的HashSet对象,同时为其分配默认的初始容量,使用默认的加载因子•H
ashSet(intinitialCapacity):定义一个空的HashSet对象,同时为其分配指定的初始容量•HashSet(intinitialCapacity,floatloadFactor):定义一个空的HashSet对象,同时为其分配指定
的初始容量,使用指定的加载因子2022/11/1259HashSet中的方法•add(Objecto):向HashSet中添加对象•clear():将HashSet中的所有对象清空•contains(Objecto):判断HashSet中是否存在给定对象•isEmpty():判断HashSe
t中是否存在元素•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中元素的Vect
or对象。2022/11/1262Vector中的方法•add(intindex,Objectelement):将element添加到index位置上•add(Objecto):将对象添加到Vector的末尾•addAll(Co
llectionc):将c中所有的元素添加到Vector的末尾•addAll(intindex,Collectionc):将c中所有的元素添加到index位置上•addElement(Objectobj)
:将对象添加到Vector的末尾•contains(Objectelem):判断Vector中是否包含当前元素2022/11/1263Vector中的方法•containsAll(Collectionc):判断Vector中是否包含c中包含的所有元素•copyInto(Ob
ject[]anArray):将Vector中的所有元素保存到给定的数组中•elementAt(intindex):获取位于Vector中index位置的元素•firstElement():获取Vec
tor中排列在第一位的元素•get(intindex):获取Vector中index位置上的元素•indexOf(Objectelem):获取当前对象在Vector中的位置索引2022/11/1264Vector中的方法•ind
exOf(Objectelem,intindex):获取当前对象在Vector中index位置之后的位置索引•insertElementAt(Objectobj,intindex):将对象插入到Vect
or的指定位置上•remove(Objecto):从Vector中删除指定的元素•remove(intindex):从Vector中删除指定位置的元素•removeAllElements():删除Vector中的所有元素•setElementAt(Objectobj,intindex
):将Vectory中index位置上的元素替换为指定对象•size():获取Vector中所包含的元素的个数•toArray():返回由Vector中所有元素组成的数组2022/11/1265Vector使用举例importjava.util.*;publicclassVectorE
xample{publicstaticvoidmain(Stringargs[]){Vectorv=newVector(2,1);System.out.println("向量初始大小:"+v.size
());System.out.println("向量初始容量:"+v.capacity());v.addElement(newInteger(1));v.addElement(newInteger(2));v.addElem
ent(newInteger(3));2022/11/1266v.addElement(newInteger(4));System.out.println("加4个整数元素后的容量:"+v.capacity());v.addElement(ne
wDouble(5.45));System.out.println("当前容量:"+v.capacity());v.addElement(newDouble(6.08));v.addElement(newInteger(7));System.out.println("当前容量:"+v.ca
pacity());v.addElement(newFloat(9.4));v.addElement(newInteger(10));System.out.println("当前容量:"+v.capacity());2022/11/1267v.addElement(newInteg
er(11));v.addElement(newInteger(12));System.out.println("第1个元素:"+(Integer)v.firstElement());System.out
.println("最后一个元素:"+(Integer)v.lastElement());if(v.contains(newInteger(3))){System.out.println("向量容量3.");}}2022/11/126
8Stack•Stack是Vector的子类•Stack为实现堆栈last-in-first-out(LIFO)的类2022/11/1269Stack中跟堆栈相关的方法•empty():判断当前的Stack中是否有元素存在•peek():读
取处于栈顶位置的元素,但不把元素从堆栈中取出•pop():读取处于栈顶位置的元素,同时将其从堆栈中删除•push(Objectitem):将当前元素加入到栈顶的位置•search(Objecto):返回当前对象在堆栈中的位置2022/1
1/1270Stack举例importjava.util.*;publicclassStackExample{staticString[]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/1272Tree
Set•TreeSet实现了SortedSet接口•TreeSet对加入其中的元素按照某种规则进行升序排列•TreeSet允许添加空元素•TreeSet是线程不安全的•所有添加到TreeSet的元素必须是可比较的2022/11/1273TreeSet的构造方法•Tree
Set():构造一个空的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中的排列规则对象(Co
mparator)•contains(Objecto):判断TreeSet对象中是否包含当前对象•first():返回TreeSet中排列在首位的元素•headSet(ObjecttoElement):返回由T
reeSet中所有小于给定对象的元素组成的SortedSet对象2022/11/1275TreeSet中的方法•isEmpty():判断TreeSet对象中元素个数是否为0•last():返回TreeSet中排列在末尾的元素•remove(Objecto):从TreeSet
对象中删除指定元素•size():返回TreeSet元素中的元素个数•subSet(ObjectfromElement,ObjecttoElement):返回由TreeSet中所有大于fromElement,同时小于toElement的元素组成的S
ortedSet对象•tailSet(ObjectfromElement):返回由TreeSet中所有大于给定对象的元素组成的SortedSet对象2022/11/1276Map接口相关的接口和类MapSortedMapAbstractMapHashMapLinkedHa
shMapTreeMapHashtableTableWeakHashMap2022/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对象,并为其分配指定的初始容量和加载因子•HashMap(Mapm):创建一个与给定Map对象具有相同键-值对的HashMap对象2022/11/1280HashMap中的主要的方法•cle
ar():清空HashMap中所有的键-值对•containsKey(Objectkey):判断HashMap对象中是否存在给定的键•containsValue(Objectvalue):判断Hash
Map对象中是否存在给定的值•get(Objectkey):返回和给定的键相对应的值•isEmpty():判断HashMap对象中是否存在键-值对•keySet():获取由HashMap中所有的键组成的Set对象2022/
11/1281HashMap中的主要方法•put(Objectkey,Objectvalue):向HashMap对象中添加键-值对•putAll(Mapt):将给定Map中所有的键-值对添加到HashMap中•remove(Objectkey):将键为给定值的键-值对从HashM
ap中删除•values():获取由HashMap中所有的值组成的Collection对象2022/11/1282Hashtable•Hashtable执行了Map接口•Hashtable以Hash表为基础
构建•Hashtable和HashMap在执行过程中具有一定的相似性•Hashtable和HashMap最根本的区别为:Hashtable中不允许空元素,即键和值都不允许为空•Hashtable是线程安全的2022/11/1283Hashtabl
e中的构造方法•Hashtable():创建一个空Hashtable对象,并为其分配默认的初始容量和加载因子•Hashtable(intinitialCapacity)创建一个空Hashtable对象,并为其分配指
定的初始容量•Hashtable(intinitialCapacity,floatloadFactor):创建一个空Hashtable对象,并指定其初始容量和加载因子•Hashtable(Mapm):创建一个与给定Map对象具有相同键-值对的H
ashtable对象2022/11/1284Hashtable中的方法•clear():清除Hashtable对象中所有的键-值对•contains(Objectvalue):判断Hashtable中是否存在给定的值•containsKey(Objectkey):
判断Hashtable中是否存在给定的键•containsValue(Objectvalue):判断Hashtable是否存在某键和给定的对象相对应•elements():返回由Hashtable中所有的值组成的Enumer
ation对象•entrySet():返回由Hashtable中的键-值对组成的Set对象•get(Objectkey):返回和指定的键相对应的值2022/11/1285Hashtable中的方法•is
Empty():判断Hashtable中是否含有键-值对•keys():返回由Hashtable中的键组成的Enumeration对象•keySet():返回由Hashtable中的键组成的Set对象•put(Objectkey,Objectvalue):向Has
htable中添加键-值对•putAll(Mapt):将给定的Map中所有的键-值对添加到Hashtable中•remove(Objectkey):删除给定键的键-值对•size():返回Hashtable中键-值对的个数•values
():返回由Hashtable中的值组成的Collection对象2022/11/1286Hashtable举例importjava.util.*;publicclassHashtable1{publicstaticvoidmain(
Stringargs[]){Hashtablebalance=newHashtable();Enumerationnames;Stringstr;doublebal;balance.put("王向东",newDouble(3434.34));balance.
put("李闵",newDouble(123.22));balance.put("赛书生",newDouble(1378.00));2022/11/1287names=balance.keys();while(name
s.hasMoreElements()){str=(String)names.nextElement();System.out.println(str+":"+balance.get(str));}System.out.println();bal=((Double)balance.ge
t("李闵")).doubleValue();balance.put("李闵",newDouble(bal+1000));System.out.println("李闵的新余额:"+balance.get("李闵"));}}2022/11/1288LinkedHash
Map•LinkedHashMap是HashMap的子类•LinkedHashMap对保存在其中的键-值对有两种排列方式–按照元素插入的顺序排列–按照元素被访问的顺序排列:对于实现高速缓存的“删除最近最少使用”的原则很有用2022/11/1289Linke
dHashMap的构造方法•LinkedHashMap():创建一个空LinkedHashtable对象,并为其分配默认的初始容量和加载因子•LinkedHashMap(Mapm):构建一个与给定的Map具有相同键-值对的LinkedHashM
ap对象•LinkedHashMap(intinitialCapacity):创建一个空LinkedHashtable对象,并为其指定初始容量•LinkedHashMap(intinitialCapacity,floatloadFactor):创建
一个空LinkedHashtable对象,并指定其初始容量和加载因子2022/11/1290LinkedHashMap的构造方法•LinkedHashMap(intinitialCapacity,floatloadFa
ctor,booleanaccessOrder):创建一个空LinkedHashtable对象,并指定其初始容量和加载因子和排列方法–如果将accessOrder设置为true,LinkedHashMap将使用访问顺序排列包含在其中的元素–如果将accessOrder设
置为false,LinkedHashMap将使用插入顺序排列包含在其中的元素。2022/11/1291LinkedHashMap中的方法•clear():删除LinkedHashMap中所有的元素•containsValue(Objectvalue):判断LinkedHashMap
中是否存在给定的元素•get(Objectkey):从LinkedHashMap中获取与给定键相对应的值2022/11/1292LinkedHashMap中的方法•removeEldestEntry(Map.Entryeldest):–方法返回是否需要将最老(最少被访问)的键-值对从LinkedH
ashMap中删除–它默认的返回值为false,即默认条件下不删除“老”的键-值对–方法在put()方法和putAll()方法调用后自动被调用–可以重新定义本方法,以便有选择地在最老的键-值对符合某个
条件,或者映像超过了某个大小时,返回true。2022/11/1293WeakHashMap•WeakHashMap实现了Map接口,它是Map的一个特殊实现,–它使用WeakReference(弱引用)来存放键。–使用这种方式时,当WeakHashMap中的键在WeakHashMap的外部
不再被引用时,这个键-值对将从WeakHashMap中删除,同时垃圾收集器将把它回收2022/11/1294WeakHashMap中的构造方法•WeakHashMap():创建一个空HashMap对象,并为其分配默认的初始容量和加载因子•WeakHashMap(intinitialCapacit
y)创建一个空WeakHashMap对象,并为其分配指定的初始容量•WeakHashMap(intinitialCapacity,floatloadFactor):创建一个空WeakHashMap对象,并为其分配指定的
初始容量和加载因子•WeakHashMap(Mapm):创建一个与给定Map对象具有相同键-值对的WeakHashMap对象2022/11/1295WeakHashMap中的方法•clear():删除WeakHashMap中所有的元素•containsKey(Objectkey
):判断WeakHashMap中是否存在给定的键•containsValue(Objectvalue):判断WeakHashMap中是否存在给定的值•entrySet():返回由WeakHashMap中所有的键-值对组成的Set对象•get(Objectkey):返回
WeakHashMap中的与给定键相对应的值•isEmpty():判断WeakHashMap中是否存在键-值对•keySet():返回由WeakHashMap中的键组成的Set对象2022/11/1296WeakHashMap中的方法•put(Objectkey,Objectva
lue):将给定的键-值对保存到WeakHashMap中•putAll(Mapt):将给定的Map对象中所有的键值对保存到WeeakHashMap中•remove(Objectkey):将与给定的键相同的键-值对从WeakHashMap中删除•size():返回Weak
HashMap中的键值对的个数•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对象20
22/11/1299TreeMap和比较相关的方法•comparator():返回TreeMap中的排列规则•containsKey(Objectkey):判断TreeMap中是否存在给定的键•firstKe
y():返回TreeMap中排列在首位的键•headMap(ObjecttoKey):返回由TreeMap中所有大于给定键的所有键-值对组成的SortedMap对象2022/11/12100TreeMap中和比较相关的方法•lastKey():返回TreeMap中排列在末尾的键•subMap(
ObjectfromKey,ObjecttoKey):返回由TreeMap中处于给定值之间的键-值对组成的SortedMap对象•tailMap(ObjectfromKey):返回由TreeMap中键小于给定值的键值对组成的SortedMap对象