《Java集合框架之Map实例解析.docx》由会员分享,可在线阅读,更多相关《Java集合框架之Map实例解析.docx(21页珍藏版)》请在优知文库上搜索。
1、JaVa集合框架之M叩实例解析1、Map概述1.1 什么是MapM叩是潞键映射到值(keyale)的对象,个映射不能包含正现的键:好个键双笫只能映时到一个值,MaP接口供应三种Colkxlion视图,允许以键集(keySel。)、值集(VidUCS()或神-值映射关系i(cntrySct()的形式衽看某个映射的内容(即狭得谊位对的内容).映时依次定义为迭代器在映射的CpIkXIion视图上返回其元素的依次.即可以映射得到键、俵和迸值的Set佻合,元素的依次是用得到的Sct集合所确定的.某些映射实现可明确保证其依次,如TreeMaP类:另些映射实现则不保证依次,如HaShM叩炎。1.2 Map与
2、Collection的区分1.Map存播的是键值对形式的元素,镀唯。值可以虫笑。2 .Collcction存储的是单列元索,子接口Scl元素唯一,子接11.ist元素可乖攵.3 .Map集合的数据结构使针对健行效.跟值无关.COUediOn集合的数据结构是针对元泰有效关于Collection可以这里hiva乐/柑架之CoIlectiCn实例解析2、MaP继承体系下面列出了常见Map集合的稣承体系与他们的特点Map键唯一IHashMap基于哈希表的Map接口的实现。此实现供应全部可选的映射操作,并允许运用null值和null键。(除了非同步和允许运用null之外,HashMaP类与Hashtab
3、le大致相同。)此类不保证映射的依次,特殊是它不保证该依次恒久不变。此实现不是同步的.I1.inkedHashMapMaP接I的哈希表和链接列表实现,具有可预知的迭代依次。此实现与HashM叩的不同之处在F,后者维护着一个运行全部条目的双重链接列表.此链接列表定义了迭代依次,该迭代依次通常就是招铤插入到映射中的依次(插入依次)。此实现不是同步的IWeakHashMap以弱键实现的基于哈希表的MaP在WeakHashMap中,当某个键不再正常运用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻挡垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时
4、,其条目从映射中有效地移除,null值和null键都被支持。IHashtable此类实现个哈希表,该哈希表将键映射到相应的值。任何非null对象都可以用作键或值。Hashtable是同步的ITreeMap基于红黑树(Red-Blacktree)的NavigableMap实现。该映射依据其键的自然依次进行排序,或者依据创建映射时供应的Comparator进行排序,详细取决于运用的构造方法。此实现不是同步的3、MaP泛型接口MaP特点:由keyahe键信为组成,键不行爪纹,值可无取大致包含如下功旎:插入(put、putAlIO)ON除(rcmovc()获得(CntrySC1()、get。、kcyS
5、ct().sizc()valucs()推断(ConUinSKCy()、containsValue()cqualOisEmp将校(replacc()rcplacC(KkCy,VoIdValuc,VnewValuc)jdkl.8之后后而示例会讲到它的)方法摘要voidclear()从今映射中移除全部映射关系(可选操作)。booleanContainSKey(ObjeCtkey)假如此映射包含指定犍的映射关系,则返回truebooleanContainsValue(Objectvalue)假如此映射招一个或多个键映射到指定值,则返回true。SetMap.EntryentrySet()返回此映射中包
6、含的映射关系的Set视图。booleanequals(Objecto)比较指定的对象与此映射是否相等。Vget(Objectkey)返回指定犍所映射的值:假如此映射不包含该键的映射关系,则返回nullinthashCode()返回此映射的哈希码值.booleanisEmpty()假如此映射未包含链-值映射关系,则返回true.Setkeyset()返回此映射中包含的键的Set视图。Vput(Kkey,Vvalue)将指定的值与此映射中的指定键关联(可选操作)。voidputAll(Mapm)从指定映射中将全部映射关系灾制到此映射中(可选操作).Vremove(Objectkey)假如存在一个槌
7、的映射关系,则将其从今映射中移除(可选操作)。intsize()返回此映射中的键-值映射关系数。Collectionvalues()返回此映射中包含的值的Collection视图。3.1、 MaP集合遍历的常见方式方式1、依据键次得值(key-value)1 .获得全部犍的桀合2 .遍历键的集合,获得到每个健3 .依据键找值方式2、依据犍位对对象获得键和侬CiurySct-kcy.valuc)1 .获得全部键值对对象的集合2 .遍历键值对对象的集合,获得到每一个键值对对象3 .依据键值对对象找键和值3.11MaP运用示例publicclassMapReviewpublicstaticvoidm
8、ain(Stringargs)Mapmap=newHaShMaPString,String();map.put(000,qqq);map.put(003rrr);map.put(001,www);map.put(002,eee);map.put(004,sss);System.out.println(ma);/干脆打印输出键值时遍历1:通过键值对对象entryset获得键与值SetEntryentrySet-map.entrySet();for(Entryentry:entrySet)Stringkey=entry.getKey();Stringvalue=entry.getValue();S
9、ystem.out.println(key=+key+value=+value);System.out.println();遍历2:通过键keyset获得值Setkeyset-map.keySet();/得到键的集合for(Stringkey:keyset)Stringvalue-map.get(key);System.out.println(key=,+key+VaIUe=+value);System.out.println();/获得MaP值的集合Collectionvalues=map.values();System.out.println(values);/推断是否存在键和值Syste
10、m.out.println(containsKey=+map.containsKey(001);System.out.println(McontainsKey=+map.containsValue(eee;/向MaP集合添加元素时,若键存在,则返回之前与键对应的值Stringputmap.put(000,aaa);System.out.println(put=,+put);/output:qqq/defaultVreplace(Kkey,Vvalue)/替换功能,将旧值替换成新值,并返回旧值(若有的话)Stringreplace=map.replace(n03n,666);System,out
11、.println(,replace=+replace);System.out.println(map);/defaultbooleanreplace(Kkey,VoldValue,VnewValue/只有当键key存在,并且OldValue与newValue相等时,旧的值才会被替换成新的位,并且返回truebooleansuccess=map.replace(004,sss,111);System.out.println(*replace2=,+success);/output:true)3.2. HashMap3.21. .HashMap的特点v三足哈布&结构,可以保il.网的nil:-I1
12、1.,一当向已存在key的MaP中添加元素时,会覆盖掉旧值,并将旧值返回。它允许运用null值和null键,但不保证映射的依次,特殊是它不保证该依次恒久不变(即不会保证存储的依次与输出的依次恒久不变)“此实现不是同步的。留能对于自定义对象,需取写其equals和hashCode方法才能保证其key的唯一性3.22. HashMap与Hashtable的异同除了非I用步和允许运用null之处,HashMap类与Hashtable大致相同3.23. HashMap的运用示例publicclassHashMapReviewpublicstaticvoidmain(Stringargs)testl()
13、;test2();)*自定义类型做key,*需重写其equals和hashcode方法才能保证其key的唯性privatestaticvoidtest2()HashMapcInfo,Stringmap=newHashMapvInfo,String();lnfo(0,aaa,)000);Info(l,bbb,)llll);InfO(3,ddd)3333);lnfo(0,aaa,),4444);Info(2,ccc)2222);map.put(newmap.put(newmap.put(newmap.put(newmap.put(newPrintMaP(map);/output:/key=Info
14、id=3jadress=dddvalue=3333/key=Infoid=2,adress=cccvalue=2222/key=Infoid=,adress=aaavalue=00/key=Info(id三l,adress三bbbvalue三llll/key=Infoid=,adress=aaaValUe=4444/,与Inf。没有度?jequals和hashCode方法时,key出现重复元素)*String或基本数据类型的包装类做key.他们已重叮hashCode与equals方法*键唯一,重或添加会替换旧值成新值privatestaticvoidtestl()HaShMaPString,Stringmap=newHaShMaPString,String();123);789);“456”);“321”);map.put(aaa,map.pt(bbb,map.put(aaa,map.put(ccc,System.out.println(map);/output:/