




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海传智播客 第二十一天 Map集合&其他API【教学内容】1、 Map集合介绍2、 Map集合常用子类介绍3、 静态导入4、其他API介绍【代码清单】此清单需在每天下午放学后填写【教学总结】:【第一阶段】【目标:Map集合介绍】1、Map集合的特点大家回顾我们在前面学习时说当数据多了使用数组来存放,对象多了使用Collection中的集合来存放。前面在学习数组还是给大家讲过,如果我们的数据和数组角标有一定的对应关系,是可以把数据存放在数组中,通过数组的角标来获取对应的数据,把这种方式称为查表法。可是当我们的对象与对象之间有了对应的关系,我们需要把这样具有对应关系的一对数据存放起来怎么做呢?采用数组只能存放具有简单对应关系的数据,不太合适。采用Collection集合,可是只能存放一个对象,无法维护这种关系。怎么做呢?为了解决这样的问题,Java中我们提供了相应的其他容器来解决,这个容器就是Map集合。打开API查询Map的描述。将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。阅读完Map集合的介绍之后发现,原来Map集合就是用来存放具有对应关系的数据的。即就是key对应value这样的关系,并且要求key不能重复。public class MapDemo public static void main(String args) /创建Map对象Map map = new HashMap();/给map中添加元素map.put(星期一, Monday);map.put(星期日, Sunday);/当给Map中添加元素,会返回key对应的原来的value值,若key没有对象的值,返回nullSystem.out.println(map.put(星期一, Mon);/根据指定的key获取对应的valueString en = map.get(星期日);System.out.println(en);/根据key删除元素,会返回key对应的value值String value = map.remove(星期日);System.out.println(value);2、keySet()方法演示如何获取Map中的所有key呢?由于Map中的所有key都是不重复的,所以获取到Map中的所有key应该会存放在Set集合中。那么查询Map的API发现,有个方法keySet。public class MapDemo public static void main(String args) /创建Map对象Map map = new HashMap();/给map中添加元素map.put(星期一, Monday);map.put(星期日, Sunday);/获取Map中的所有keySet keySet = map.keySet();/遍历存放所有key的Set集合Iterator it =keySet.iterator();while(it.hasNext()/得到每一个keyString key = it.next();/通过key获取对应的valueString value = map.get(key);System.out.println(key+=+value);3、entrySet()方法演示继续查阅Map的API,发现还有一个方法是entrySet,这个方法的描述是得到所有key和value的映射关系,这是啥意思呢?假设Map中存放一对一对的夫妻,那么entrySet获取到是每一对夫妻这种夫妻关系。public class MapDemo public static void main(String args) /创建Map对象Map map = new HashMap();/给map中添加元素map.put(星期一, Monday);map.put(星期日, Sunday);/获取Map中的所有key与value的对应关系SetEntry entrySet = map.entrySet();/遍历Set集合IteratorEntry it =entrySet.iterator();while(it.hasNext()/得到每一对对应关系Entry entry = it.next();/通过每一对对应关系获取对应的keyString key = entry.getKey();/通过每一对对应关系获取对应的valueString value = entry.getValue();System.out.println(key+=+value);注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。通过Map集合中的values方法,可以获取到Map中的所有value。【学习效果】1、 掌握map集合的特点2、 掌握map集合遍历方式。要求必须通过代码体会【知识点过度】基本了解了Map这个顶层接口后,那么我们就需要了解下Map的其他子类。他们都具备什么特点呢?【第二阶段】【目标:Map集合常用子类介绍】在讲解Collection集合时,给大家讲解查看API的技巧,所以在学习Map的子类时,就结合前面讲解的特点来分析Map的子类即可。1、Map常见子类的特点Map有多个子类,这里我们主要讲解常用的HashMap和TreeMap集合。Hashtable:数据结构:哈希表。是同步的,不允许null作为键和值。被hashMap替代。Hashtable下有子类Properties:属性集,键和值都是字符串,而且可以结合流进行键值的操作。等到了IO流,你会更清楚。HashMap:数据结构:哈希表。不是同步的,允许null作为键和值。HashMap下有个子类LinkedHashMap基于链表+哈希表。可以保证map集合有序(存入和取出的顺序一致)。TreeMap:数据结构:二叉树。不是同步的。可以对map集合中的键进行排序。2、HashMap存储自定义键值练习一:学生对象(姓名,年龄)都有自己的归属地,既然有对应关系。将学生对象和归属地存储到map集合中。注意:同姓名同年龄视为重复的键。public class HashMapTest public static void main(String args) /1,创建hashmap集合对象。Map map = new HashMap();/2,添加元素。map.put(new Student(lisi,28), 上海);map.put(new Student(wangwu,22), 北京);map.put(new Student(zhaoliu,24), 成都);map.put(new Student(zhouqi,25), 广州);map.put(new Student(wangwu,22), 南京);/3,取出元素。keySet entrySet/Set keySet = map.keySet();/for(Student key : keySet)for(Student key : map.keySet()String value = map.get(key);System.out.println(key.toString()+.+value);注意:当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。如果要保证map中存放的key和取出的顺序一致,可以使用LinkedHashMap集合来存放。3、TreeMap存储自定义键值练习二: 学生对象(姓名,年龄)都有自己的归属地,既然有对应关系。 将学生对象和归属地存储到map集合中。注意:同姓名同年龄视为重复的键。 按照学生的年龄进行从小到大的排序。 TreeMap。public class TreeMapTest public static void main(String args) / 1,创建TreeMap集合对象。Map map = new TreeMap();/ 2,添加元素。map.put(new Student(lisi, 28), 上海);map.put(new Student(wangwu, 22), 北京);map.put(new Student(zhaoliu, 24), 成都);map.put(new Student(zhouqi, 25), 广州);map.put(new Student(wangwu, 22), 南京);/3,取出所有元素,entrySet()for(Map.Entry me : map.entrySet()Student key = me.getKey();String value = me.getValue();System.out.println(key+:+value);注意:给TreeMap存放自定义对象,自定义对象作为key进行排序时,自定义对象必须具备比较功能,即实现Comparable接口。如果需要特定方式进行比较,我们也可以给TreeMap集合传递自定义的比较器进行比较。4、Map练习-字母出现次数练习:werertrtyuifgkiryuiop,获取字符串中每一个字母出现的次数。要求返回结果个格式是 a(1)b(2)d(4).;思路:1,获取到字符串中的每一个字母。2,用字母取查表,如果查到了该字母对应的次数,就将这个次数+1后重新存回表中。如果没有查到呢?将该字母和1存到表中。3,每一字母都查完表后,表中记录的就是所有字母出现的次数。字母和次数之间存在对应关系,而且字母是唯一性的,所以可以使用map集合做表进行查询。通过结果发现 字母有顺序的,所以可以通过map集合中的treemap作为表。public class MapTest public static void main(String args) String str = awaa+acr=ebarct,btyduiefgkiryuiop;str = getCharCount(str);System.out.println(str);/* * 获取字符串中的字母出现次数。 */public static String getCharCount(String str) /1,将字符串转成字符数组。char chs = str.toCharArray();/2,定义表。treemap.TreeMap map = new TreeMap();/3,遍历字符数组。for (int i = 0; i =a & chsi=A & chsi=Z)continue;/4,将遍历到的字母作为键去查map这个表。获取对应的次数。Integer value = map.get(chsi);/5,有可能要查询的字母在表中不存在对应的次数,需要判断。/如果返回是null,说明字母没有对应的次数。就将这个字母和1存储到表中。if(value = null)/将字母和1存储。map.put(chsi,1);else/否则,说明有对应的次数对次数自增。将字母和新的次数存储到表中。value+;map.put(chsi,value);return mapToString(map);/* * 将map集合中的键值转成 格式是 a(1)b(2)d(4). * map中有很多数据,无论是多少个,什么类型,最终都变成字符串。 * StringBuffer 这个容器就符合这个需求。如果是单线程,建议使用StringBuilder。 * */private static String mapToString(Map map) /1,明确容器。StringBuilder sb = new StringBuilder();/2,遍历map集合。for(Character key : map.keySet()Integer value = map.get(key);sb.append(key+(+value+);return sb.toString();【学习效果】1、 掌握HashMap和TreeMap的使用。案例必须练习2、 往HashMap中存储学生对象(姓名,年龄)-归属地对应关系。同姓名同年龄是同一个学生。视为相同键。动手!刻意存储相同的键。3、 对Map中存储学生对象(姓名,年龄)-归属地对应关系。按照学生的年龄进行排序。【知识点过度】在前面查询API的时候看到部分参数书写形式中间有三个小点,那是什么东西呢?接下来我们学习下JDK1.5中加入的一些特征。【第三阶段】【目标:静态导入】1、JDK1.5可变参数在JDK1.5之后,如果我们一个方法需要接受多个参数,并且这个参数类型一致,我们可以对其简化成如下格式:修饰符 返回值类型 方法名(参数类型. 形参名)其实这个书写完全等价与修饰符 返回值类型 方法名(参数类型 形参名)只是后者这种书写,调用者在调用时必须传递数组,而前者可以直接传递数据即可。jdk1.5以后。出现了简化操作。. 用在参数上,称之为可变参数。同样是代表数组,但是在调用这个带有可变参数的函数时,不用创建数组(这就是简单之处),直接将数组中的元素作为实际参数进行传递,其实编译成的class文件,将这些实参先封装到一个数组中,在进行传递。这些动作编译器在生产class时,都帮你完成了。public class ParamDemo public static void main(String args) int arr = 21,89,32;int sum = add(arr);System.out.println(sum);sum = add(21,89,32);/可变参数调用形式System.out.println(sum);/JDK1.5之后写法public static int add(int.arr)int sum = 0;for (int i = 0; i arr.length; i+) sum += arri;return sum;/原始写法public static int add(int arr) int sum = 0;for (int i = 0; i arr.length; i+) sum += arri;return sum;注意:上述add方法在同一个类中,只能存在一个。因为会发生调用的不确定性注意:如果在方法书写时,这个方法拥有多参数,参数中包含可变参数,可变参数一定要写所有参数列表的末位。2、JDK1.5静态导入在JDK1.5之后,给提供针对使用静态方法的机制,因为我们都知道静态是不需要对象就能直接调用的,可是每次写类名都会很烦,那怎么做呢?这时可以像导类所在的包一样,把静态的成员导入进来。import java.util.List;import java.util.ArrayList;import static java.util.Collections.*;/静态导入,导入是指定的类中的静态成员。import static java.lang.System.*;public class StaticImportDemo public static void main(String args) List list = new ArrayList();max(list);min(list);out.println(hello itcast);【学习效果】掌握可变参数和静态导入的使用。【知识点过度】接下来我们需要了解下API中其他常用类。【第四阶段】【目标:其他API介绍】1、System类介绍System类:1,不需要实例化,都是静态的属性和方法。并且是最终类,无法被继承2,out对应标准输出流(显示器),in属性对应的是键盘。演示一些System类中的方法。currentTimeMilles:获取当前时间。可以用于计算程序运行时间只要将开始时间和结束时间相减即可。public class SystemDemo private static final String LINE_SEPARATOR = System.getProperty(line.separator);public static void main(String args) long time = System.currentTimeMillis();System.out.println(time);/毫秒值。1382691495296/演示getProperties()获取系统属性集。Properties prop = System.getProperties();/获取系统属性集中的信息,遍历Properties集合。使用map的方法没问题,但是map有泛型取出时要强转。Properties有没有提供自身获取数据的方法呢?/获取键集合。Set keySet = prop.stringPropertyNames();for(String key : keySet)String value = prop.getProperty(key);/通过键获取值。System.out.println(key+:+value);/获取指定信息,比如:操作系统。String osname =System.getProperty();System.out.println(osname);/获取系统中的行分隔符。这样该程序在移植时,很方便。不同的系统,获取该系统上行分隔符System.out.println(hello+LINE_SEPARATOR+itcast);2、Math类介绍Math数序运算。方法都是静态的。public class MathDemo public static void main(String args) Math
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旧外墙喷漆改造施工方案
- 债务重组协议债务减免与清偿期限
- 2025国家电投所属中国电力招聘笔试参考题库附带答案详解
- 2024-2025学年人教版8年级数学上册《 整式的乘法与因式分解》综合训练试题(含解析)
- 2025年抗菌药物合理使用培训考核题及答案
- 2023年度安全监察人员考前冲刺试卷附答案详解【基础题】
- 2025年电梯考试通关题库含答案详解【典型题】
- 2024年高职单招测试卷附完整答案详解(有一套)
- 期货从业资格之《期货法律法规》强化训练题型汇编附答案详解【培优】
- 2024-2025学年度电梯考试题库及参考答案详解(突破训练)
- 2025年招投标管理考试题库
- 渠道维护协议书
- Unit 2 Home Sweet Home 重点短语和句式-人教版英语八年级上册
- 黄体破裂护理常规课件
- 防治大气污染课件
- 环境监测质量管理课件
- 国际音标教学课件
- 2025-2030中国可变磁阻旋转变压器行业产销状况与应用趋势预测报告
- (高清版)DB31∕T 310001-2020 船舶水污染物内河接收设施配置规范
- 诊所治疗室管理制度
- 2025年高考英语全国二卷听力试题真题及答案(含MP3+原文)
评论
0/150
提交评论