集合类-补充案例_第1页
集合类-补充案例_第2页
集合类-补充案例_第3页
集合类-补充案例_第4页
集合类-补充案例_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、 掌握如何使用操作HashMap集合的方法3、需求分析Map接II用于存储具有对应关系的数据。它的每个元素都包含一个键对彖Key和值对彖Value,键和值对象之间存在映射。HashMap集合是Map接II的一个实现类。为了让初学者能熟悉使用HasliNIap集合,本章将采用使用不同方法对HashMap集合进行操作,学习HashMap集合的使用方法。4、设计思路(实现原理)编写类Examplel3,创建一个HashMap集合,并向集合中添加元素使用一系列方法分别对定义的集合进行增加、移除、判断等操作运行程序,根据输出结呆,分析这些方法对HashMap集合的操作二、案例实现编写Example13类

2、,具体代码如下:importjavautil*;publicclassExample13publiestaticvoidmain(Stringargs)/创建集合对象Mapmap=newHashMap();/添加元索map.put(Hczbk001,”林WrS);mapput(MczbkOOB1z林志玲);map.put(“CNbk002”,”林志颖;/添加元索,如果键存在,就普换,返回以前与key关联的值。czbkOOS,”林志炫,);/Vremove(Objectkey):根据指定的键删除键值对。remove:+mapremove(”czhk003);/判断指定的键是否在集合中存在ncon

3、tainsKey:”+mapcontainsKey(匕k002);ncontainsKey:”+mapcontainsKey(匕k007);/判断指定的值是否在集合中存在ncontainsValue:+mapcontainsValue(林志颖,);/判断集合是否为空isEmpty:+mapisEmpty();/集合中元素的个数size:n+map/输出集合对象名称map:+map);运行结果如图7-17所示。图7J7运行结果三、案例总结在本案例中,从运行结果可以看出:1)集合中键为czbkOO3对应的值是”林志玲”。2)由于集合中存在键czbkOO3,所以程序做map.put(”czbkOO3

4、”,”林志炫”臊作时,值会替换为”林志炫”。所以删除键为czbkOO3的对象时,程序输出remove:”林志炫”。由此证实了Map中的键必须是唯一的,不能重复。如果存储了相同的键,后存储的值则会覆盖原有的值,简而言之就是,键相同,值覆盖。3)”czbk002在集合中存在,所以输出true。”czbk007”在集合中不存在,输出false.4)值”林志颖”在集合中存在,所以输出tine。)因为集合不为空,所以map.isEmptyO返回false案例7舁4遍历Map中所有的键值一、案例描述1、考核知识点编号:00107014名称:HashMap集合2、练习目标掌握遍历Map中所有的键值两种方法3

5、、需求分析在程序开发中,经常需要取出Map中所有的键和值。为了让人家熟悉遍历Map中所有的键值,本案例将演示遍历Map中所有的键值对的两种遍历方式。4、设计思路(实现原理)1)编写类Example14,在该类中创建Map集合并向集合中添加元素2)使用第一种方式,遍历集合元素,先获取键的集合,再获取键所对应的值3)使用第二种方式,先获取集合中键值对映射关系,再从映射关系中获得键和值二、案例实现importjavautil*;publicclassExample14publiestaticvoidmain(Springargs)/创建集合对象Mapmap=newHashMap();/添加元索map

6、.put(H001李世民J;map.put(ll002l朱元璋);map.put(“003”,武则天T;”方式一遍历:/遍历先获取键的集合,再获取键所对应的值Setkeyset=map.keyset();for(Objectkey:keyset)Objectvalue=mapget(key);+*+value);方式二遍历:”);/遍历2:先获取集合中键值对映射关系,再从关系中获得键和值SetMap.EntrymapSet=mapentrySeC();for(MapEntryme:mapSet)Objectkey=me.getKey();Objectvalue=me.getValue();+*

7、+value);运行结果如图7-18所示。图7-18运行结果三、案例总结1、在本案例中,第一种遍历Map的方式是首先调用Map对彖的Keyset。方法,获得存储Map中所有键的Set集合,然后通过foreach循坏遍历集合中的所有的键,最后通过调用get(key)方法,根据键获取对应的值。2、本案例中的第二种遍历Map的方式,首先调用Map对象的entrySet()方法获得存储Map中所有映射的Set集合,这个集合中存放了Map.Entry类型的元素(Entry是Map接II内部类),每个Map.Entry对象代表Map中的一个键值对,然后迭代Set集合,获得每一个映射对彖,并分别调用映射对象

8、的getKeyQ和getValue。方法获取键和值。3、在Map中,还提供了一个valuesQ方法,通过这个方法可以直接获取Map中存储所有值的Collection集合。获取代码如下:Collectionvalues=map.values();for(Objectvalue:values)r将此代码替换案例中的两种遍历方法的代码,运行结果如图7-19所示。图79运行结果案例7-15TreeMap集合的存取一、案例描述1、考核知识点编号:00107015名称:TreeMap集合2、练习目标了解TreeMap集合的存储特点掌握TreeMap集合存储和迭代方法3、需求分析TreeMap集合用来存储键

9、值映射关系,其中不允许出现重复的键。在TreeMap中是通过二叉树的原理来保证键的唯一性,因此TreeMap中所有的键是按照某种顺序排列的。为了熟悉TreeMap集合的使用,本案例将使用TreeMap集合获取一个字符串中每一个字母出现的次数,在实现这一功能的过程中掌握TreeMap集合存储和迭代方法。4、设计思路(实现原理)1)编写一个类Examplel5,要获取字符串cbxzbvavdvgd1中,每一个字母出现次数,先将字符串转化成数组2)定义一个TreeMap集合,字符出现的次数作为键,每一个字符作为值3)遍历字符数组,获取到每一个字符4)拿到每一个字符,到TreeMap集合中找对应的值,

10、判断返回值是否为NULL5)如果返回值是NULL,就将字符存储到TreeMap集合中,对应的键记为16)如果返回值不为NULL,就将键值加1,并重新将值(字符)和键(出现的次数)存入集合7)把TreeMap的元素拼接成一个字符串,输出结果二、案例实现importjava.util*;publieclassExamplelSpublicstaticvoidmain(Stringargs)Strings=cbxzbvav&vgd;/把字符串变成字符数组。charchs=stoCharArray();/定义一个TreeMap集合TreeMaptm=newTreeMap();/遍历字符数组,获取到每一

11、个字符。for(charch:chs)/拿到该字符,到TreeMap集合中找对应的值Integeri=cm.get(ch);/根据返回值是否为null。绘:存储,把次数记录为1:否:把数据+,然后重写存储if(i=null)(put(ch,1);elsei+;put(chzi);/把TreeMap的数据拼接成一个字符串。StringBuildersb=newStringBuilder();Setser=tmkeyset();for(Characterch:set)Integeri=tm.get(ch);sbappend(ch)append(n)append(i)append(”);String

12、result=sbtoString();/运行结果如图7-20所示。图7-20运行结果三、案例总结1、在本案例中,演示了TreeMap集合中元素的存储和迭代方法与HashMap相同。从输出结果可以看出,TreeMap集合中的元素是不重复的,并且按照值的自然顺序进行了排序。这是因为在TreeMap中是通过二叉树的原理来保证键的唯一性,这个TreeSet集合存储的原理一样,因此TreeMap中所有的键是按照某种顺序排列的。2、本案例中,在定义TreeMap集合时使用了泛型,即参数化类型。它可以指定该类中方法操作的数据类型,避免在集合存取时会产生的数据类型转化的错误。案例7-16Proeprties

13、集合的功能案例描述1、考核知识点编号:00107016名称:Proepmes集合2、练习目标掌握Pioepities集合的存储和遍历方法3、需求分析Map接II中还有一个实现类Hashtable,它和HasliNIap的区别是Hashtable是线程安全的。Hashtable类有一个子类Piopeities在实际应用中非常重要,Properties主要用来存储字符串类型的键和值,为了掌握Properties集合的使用,本案例将演示Properties集合中元素的存储,修改和遍历。4、设计思路(实现原理)编写一个类Example16,创建Pioepities集合对彖向Proeprties集合中添

14、加元素遍历Pioepities集合中的元素二、案例实现importjavautil*;publicclassExample16publiestaticvoidmain(Stringargs)/创建集合对象Propertiesprop=newProperties();/添加元素prop.setProperty(11刘备”,”双股剑”);prop.setProperty(H关羽J”青龙偃月刀”);propsetProperty(”张飞”.”丈丿1蛇矛”);Setset=propstzingPropertyNames();for(Stringkey:set)Stringvalue=propgetPr

15、operty(key);+value);运行结果如图7-21所示。图7-21运行结果三、案例总结Properties类中,针对字符串的存取提供了两个专用的方法setPiop亡rty()和getPropeilv()osetPropeiTyQ方法用于将配置项的键和值添加到Piopenies集合当中。propertyNamesQ方法得到一个包含所有键的set对彖,然后在遍历所有的键时,通过调用getPropertyO方法获得键所对应的值。案例7舁7泛型的使用一、案例描述1、考核知识点编号:00107017名称:泛型的使用2、练习目标了解为什么要使用泛型掌握泛型的使用方法3、需求分析集合可以存储任何类

16、型的对彖,但是在程序中无法确定一个集合中的元素到底是什么类型的。那么在取出元素时,如果进行强制类型转换就很容易出错。为了解决这个问题,在Jaw中引入了“参数化类型(parameterizedtype)”这个概念,即泛型。本案例将使用泛型来限定集合元素的数据类型,从而方便初学者学习泛型的使用方法。4、设计思路(实现原理)编写一个类Example17,创建AiravList集合对彖,并指定集合只能存储Strmg类型的元素向集合中添加元素,其中有一个Integer类型的元素遍历集合中的元素,观察结果是否报错二、案例实现importjavautil*;publicclassExample17publi

17、estaticvoidmain(Stringargs)/用ArrayList存储字符串并遍历ArrayLis*cS匸array=newArrayLisrS匸arrayadd(,hello);arrayadd(orld);arrayadd(java);array,add(newInteger(10);/添加一个Integer类型的数据,此处报编译异常Irerarorit=arrayiterator();while(ithasNe瓦匸()Strings=(String)i匸.next();r编译程序发现报错,如图7-22所示。图7-22编译报错错误显示array中不能再存入除Strmg类型之外的数

18、据类型,将Integer类型数据删掉,重新编译运行程序,结果如图7-23所示。图7-23运行结果三、案例总结1、在定义集合类时,可以使用“参数化类型”的方式指定该类中方法操作的数据类型,具体格式如下:ArrayList参数化类型list=newArrayList();2、在本案例中,使用泛型规定了AiravList集合只能存入String类型元素。需要注意的是,在使用泛型后每次遍历集合元素时,可以指定元素类型为Suing,而不是Object,这样就避免了在程序中进行强制类型转换。3、在程序中也可以自定义泛型,自定义泛型的具体代码如下:classcachePool/在创建类时,声明参数类型为TT

19、temp;publicvoidsave(Ttemp)/在创建save()方法时,指定参数类型为Tthis.temp=temp;publicTget()/在创建get()方法时,指定返回值类型为Treturntemp;在定义CachePool类时,声明了参数类型为T,例如:在实例化对象时通过Integer将参数T指定为Integer类型,同时在调用save()方法时传入的数据也是Integer类型,那么调用get()方法取出的数据自然就是Integer类型,这样做的好处是不需要进行类型转换。案例7-18Collections类对集合的操作-V案例描述1、考核知识点编号:00107019名称:Co

20、llectionsV.具类2、练习目标掌握如何使用Collections类对集合进行操作3、需求分析在程序中,针对集合的操作非常频繁,针对这些常见操作,JDK提供了一个工具类专门用来操作集合,这个类就是CoUectionso为了初学者能够熟悉CoUections类中的方法,本案例将使用Collections类中的各种方法操作集合实现模拟斗地主发牌,来学习Collections类对集合操作的方法。4、设计思路(实现原理)编写类ExamplelS,创建两个Stimg类型数组,其中一个用于存储牌的花色,一个用于存储牌的数字创建一个AirayList集合作为牌盒,将人小王和不同花色不同数字的牌循环添加

21、到集合中用Collections工具类的shufile()方法洗牌创建三个AirayList集合作为三个人的牌的集合,并循环发牌,要留三张底牌打印出三个人的牌和集合中留的三张底牌二、案例实现importjavautil*;publicclassExample18TOC o 1-5 h zpubliestaticvoidmain(Stringargs)/表示花色的数组Stringcolors=”黑桃J”红桃J”梅花”,“方块”/表示点数的数组Stringnumbers=n2,zH3n4z57n8z”10”,y,yK;/找一个牌盒ArrayLisrarray=newArrayLis,c();arr

22、ay大王T;arrayadd(小王,J;/循环装牌for(Stringc:colors)(for(Stringn:numbers)arrayadd(cconca匸(n);/洗牌Collectionsshuffle(array);/发牌ArrayLisrArrayLisrArrayLisr/用普通forlinString=newArrayList();ArrayLisrArrayLisrArrayLisr/用普通forfor(intx=0;xTOC o 1-5 h zarraysize()-3;x+)for(intx=0;xif(x%3=0)linSadd(arrayget(x);elseif(

23、x%3=1)zhouStringadd(arrayget(x);elseif(x%3=2)meStringadd(arrayget(x);/看牌linString:+linString);zhouString:n+zhouString);meString:n+meString);/看底牌”三张底牌:”);for(intx=arraysize()-3;x.运行结果如图724所示。图724运行结呆三、案例总结1、本案例中使用到了Collections工具类的shuffle()方法对List集合中的元素进行随机排序(模拟玩扑克中的“洗牌”)o2、CollectionsX具类的其它方法,具体如表7H所

24、示。表7-4Collection类的相关方法方法声明功能描述staticbooleanaddAll(Collectionc,T.elements)将所有指定元素添加到指定collection中staticvoidreverse(Listlist)反转指定List集合中元素的顺序staticvoidshuffle(Listlist)对List集合中的元素进行随机排序(模拟玩扑克中的“洗牌”)staticvoidsort(Listlist)根据元素的自然顺序对List集合中的元素进行排序staticvoidsvap(Listlist.iiitijntj)将指定List集合中1处元素和j处元素进行交

25、换staticintbinarySearch(Listlist,Objectkey)使用二分法搜索指定对象在List集合中的索引,查找的List集合中的元素必须是有序的staticObjectmax(Collectioncol)根据元素的自然顺序,返回给定集合中最大的元素staticObjectmin(Collectioncol)根据元素的自然顺序,返回给定集合中最小的元素staticbooleanreplaceAll(Listlist.ObjectoldVaLObjectnewVal)用一个新的newVal替换List集合中所有的旧值oldVhl案例7舁9Arrays类对数组的操作一、案例描述1、考核知识点编号:00107020名称:Amiys工具类2、练习目标掌握如何使用Airays工具类对数

温馨提示

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

评论

0/150

提交评论