Map接口:

  Map接口与Collection接口无继承关系。

    区别:Collection中的元素是孤立的,一个一个存进去的。

       Map作为一个映射集合,每一个元素包含Key-value对(键-值对)。即,Map元素总是成对出现的。

  Map中的value对象可以重复,但Key不能重复。

  Map接口的常用集合:

  1.HashMap集合,HashMap类与HashSet类基本相同,都是无序的,

  2.LinkedHashMap集合,存储数据是有序的。

Map接口的常用方法:

  1. package Demo2;
  2.  
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.Set;
  7.  
  8. public class Demo1 {
  9. public static void main(String[] args) {
  10. function();
  11. function1();
  12. function2();
  13. }
  14.  
  15. private static void function2() {
  16. //处理映射中的键/值对组的视图操作
  17. HashMap<Integer,String> h=new HashMap<>();
  18. h.put(10,"aaa");
  19. h.put(20,"bbb");
  20. h.put(30,"ccc");
  21. h.put(40,"ddd");
  22. System.out.println(h);//{20=bbb, 40=ddd, 10=aaa, 30=ccc}
  23. Set<Integer> set = h.keySet();//keySet()方法 返回此映射中包含的键的Set视图(即:将该映射中的键都放入 一个Set集合)
  24. System.out.println(set);//[20, 40, 10, 30]
  25. //values()方法,返回此映射中包含的值的Collection视图。(将该映射中的值都放入一个Collection集合)
  26. Collection<String> val = h.values();
  27. System.out.println(val);//[bbb, ddd, aaa, ccc]
  28. }
  29.  
  30. private static void function1() {
  31. //查询操作
  32. HashMap<String,Integer> h=new HashMap<>();
  33. h.put("张三",18);//put(key,value)方法,将指定的value值与此映射中的指定键key关联
  34. h.put("李四",20);
  35. h.put("小明",22);
  36. h.put("小红",26);
  37. System.out.println(h);//{李四=20, 张三=18, 小明=22, 小红=26}
  38. Integer s = h.get("张三");//get(key)返回指定键key的值,如果此映射不包含该键的映射关系,则返回null。
  39. System.out.println(s);//
  40. int size = h.size();//size()返回映射中的键-值关键字(即集合中的元素个数,每一个 键-值 为一个元素)
  41. System.out.println(size);//
  42. boolean b = h.containsKey("张三");//containsKey(key)判断映射中是否存在关键字key
  43. System.out.println(b);//true containsValue(value) 判断映射中是否存在值value
  44. h.clear();
  45. boolean b1 = h.isEmpty();// 如果此映射不包含键-值映射关系,则返回 true。
  46. System.out.println(b1);//true
  47. }
  48.  
  49. private static void function() {
  50. //添加删除操作
  51. Map<String,Integer> m=new HashMap<>();
  52. m.put("张三",18);//put(key,value)方法,将指定的value值与此映射中的指定键key关联
  53. m.put("李四",20);
  54. m.put("小明",22);
  55. m.put("小红",24);
  56. System.out.println(m);//{李四=20, 张三=18, 小明=22, 小红=24}//输出是无序的
  57. m.remove("小明");//remove(key) :如果存在一个映射关系,则将其从此映射中 移除。
  58. System.out.println(m);//{李四=20, 张三=18, 小红=24}
  59. m.clear();//从此映射中移除所有的映射关系
  60. System.out.println(m);//{}
  61. }
  62. }

Map接口的遍历:

  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.Set;
  5.  
  6. public class Demo2 {
  7. public static void main(String[] args) {
  8. function();
  9. function2();
  10. }
  11.  
  12. private static void function2() {
  13. //增强性for循环
  14. Map<Integer,String> h=new HashMap<>();
  15. h.put(11,"aa");
  16. h.put(22,"bb");
  17. h.put(33,"cc");
  18. h.put(44,"dd");
  19. for (Integer key : h.keySet()) {
  20. System.out.println(key+":"+h.get(key));
  21. /* 33:cc
  22. 22:bb
  23. 11:aa
  24. 44:dd*/
  25. }
  26. }
  27.  
  28. private static void function() {
  29. //迭代器遍历
  30. Map<Integer,String> m=new HashMap<>();
  31. m.put(10,"aaa");
  32. m.put(20,"bbb");
  33. m.put(30,"ccc");
  34. m.put(40,"ddd");
  35. Set<Integer> set = m.keySet();
  36. Iterator<Integer> it = set.iterator();
  37. while (it.hasNext()) {
  38. Integer key = it.next();
  39. String val = m.get(key);
  40. System.out.println(key+":" +val);/*20:bbb
  41. 40:ddd
  42. 10:aaa
  43. 30:ccc*/
  44.  
  45. }
  46. }
  47. }

Map第二种遍历方式:Map.Entry接口遍历

  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.Set;
  5. /*主要用到Entry接口中的entrySet方法来获得映射的Set视图,然后用getKey,getValue方法来获得键和值*/
  6. public class Demo3 {
  7. public static void main(String[] args) {
  8. function();
  9. }
  10.  
  11. private static void function() {
  12. //迭代器循环
  13. Map<Integer,String> m=new HashMap<>();
  14. m.put(10,"aa");
  15. m.put(20,"bb");
  16. m.put(30,"cc");
  17. m.put(40,"dd");
  18. Set<Map.Entry<Integer, String>> set = m.entrySet();
  19. Iterator<Map.Entry<Integer, String>> it = set.iterator();
  20. while (it.hasNext()) {
  21. Map.Entry<Integer, String> next = it.next();
  22. Integer key = next.getKey();//getKey返回与此项对应的键
  23. String value = next.getValue();//getValue 返回与此项对应的值
  24. System.out.println(key+":"+value);
  25. }
  26. /* 20:bb
  27. 40:dd
  28. 10:aa
  29. 30:cc*/
  30. }
  31. }

LinkedHashMap类:

  1. import java.util.LinkedHashMap;
  2.  
  3. public class Demo4 {
  4. public static void main(String[] args) {
  5. function();
  6. }
  7.  
  8. private static void function() {
  9. LinkedHashMap<Integer,String> link=new LinkedHashMap<>();
  10. link.put(10,"aaa");
  11. link.put(20,"bb");
  12. link.put(30,"cc");
  13. link.put(40,"dd");
  14. System.out.println(link);
  15. for (Integer key : link.keySet()) {
  16. System.out.println(key+":" +link.get(key));
  17. }
  18. /* {10=aaa, 20=bb, 30=cc, 40=dd}
  19. 10:aaa
  20. 20:bb 结果可以看出是有序的
  21. 30:cc
  22. 40:dd*/
  23. }
  24. }

综合练习:

  Map嵌套Map:

  1. package Zuoye;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6. import java.util.Set;
  7.  
  8. public class Demo {
  9. public static void main(String[] args) {
  10. function1();
  11. function2();
  12. function3();//增强型for循环遍历嵌套Map
  13. }
  14.  
  15. private static void function3() {
  16. Map<String, Map<Integer, String>> aaa = function();
  17. //创建aaa映射的Set视图
  18. Set<Map.Entry<String, Map<Integer, String>>> aSet = aaa.entrySet();
  19. for (Map.Entry<String, Map<Integer, String>> amap : aSet) {
  20. //获得下一个aaa映射对象的键
  21. String className = amap.getKey();
  22. System.out.println(className);
  23. //获得值
  24. Map<Integer, String> classInfo = amap.getValue();
  25. Set<Map.Entry<Integer, String>> student = classInfo.entrySet();
  26. for (Map.Entry<Integer, String> stu : student) {
  27. Integer stuNum = stu.getKey();
  28. String stuName = stu.getValue();
  29. System.out.println(stuNum+":"+stuName);
  30. }
  31. }
  32. }
  33.  
  34. private static void function2() {
  35. //调用Map嵌套对象
  36. Map<String, Map<Integer, String>> aaa = function();
  37. //创建aaa的Set视图对向eMap,通过Entry接口
  38. Set<Map.Entry<String, Map<Integer, String>>> eMap = aaa.entrySet();
  39. //创建eMop的迭代器对象it
  40. Iterator<Map.Entry<String, Map<Integer, String>>> it = eMap.iterator();
  41. while (it.hasNext()) {
  42. //获得下一个元素(Map(Map))对象赋值给classMap
  43. Map.Entry<String, Map<Integer, String>> classMap = it.next();
  44. //获得Map(Map)的键,即班级名 ,通过getKey方法
  45. String className = classMap.getKey();
  46. //获得Map(Map)的值,即(Map)对象赋值给classInfo
  47. Map<Integer, String> classInfo = classMap.getValue();
  48. //给(map)映射对象创建Set视图,存储学生信息
  49. Set<Map.Entry<Integer, String>> stu = classInfo.entrySet();
  50. //创建迭代器
  51. Iterator<Map.Entry<Integer, String>> itstu = stu.iterator();
  52. while (itstu.hasNext()) {
  53. //获取下一个学生元素
  54. Map.Entry<Integer, String> Student = itstu.next();
  55. //获得学生对象的键
  56. Integer key = Student.getKey();
  57. //获得学生的值
  58. String value = Student.getValue();
  59. System.out.println(className+":"+key+":"+value);
  60. }
  61. }
  62. }
  63.  
  64. private static void function1() {
  65. //迭代器第一种map循环
  66. Map aaa = function();
  67. Set set = aaa.keySet();
  68. Iterator it = set.iterator();
  69. while (it.hasNext()) {
  70. Object className = it.next();
  71. System.out.println(className);
  72. Map ClassInfo = (Map) aaa.get(className);
  73. Set Student = ClassInfo.keySet();
  74. Iterator its = Student.iterator();
  75. while (its.hasNext()) {
  76. Integer StudentNum = (Integer) its.next();
  77. String studentName = (String) ClassInfo.get(StudentNum);
  78. System.out.println(StudentNum+":"+studentName);
  79. /*hoodp班
  80. 1:许锦迪
  81. 2:王家宝
  82. java班
  83. 1:朱东阳
  84. 2:常军凯*/
  85. }
  86. }
  87. }
  88.  
  89. private static Map<String, Map<Integer, String>> function() {
  90. //创建Map嵌套Map的对象
  91. //创建java班Map集合
  92. Map<Integer,String> java=new HashMap<Integer,String>();
  93. java.put(001,"朱东阳");
  94. java.put(002,"常军凯");
  95. //创建hoodp班Map集合
  96. Map<Integer,String> hoodp=new HashMap<Integer,String>();
  97. hoodp.put(001,"许锦迪");
  98. hoodp.put(002,"王家宝");
  99. //创建aaaMap集合
  100. Map<String,Map<Integer,String>> aaa=new HashMap<String,Map<Integer,String>>();
  101. aaa.put("java班",java);
  102. aaa.put("hoodp班",hoodp);
  103.  
  104. return aaa;
  105. }
  106. }

Java学习笔记24(Map集合)的更多相关文章

  1. 【Java学习笔记】Map集合的keySet,entrySet,values的用法例子

    import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.M ...

  2. Java集合类学习笔记(Map集合)

    Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...

  3. Java 学习笔记 两大集合框架Map和Collection

    两大框架图解 Collection接口 由第一张图,我们可以知道,Collection接口的子接口有三种,分别是List接口,Set接口和Queue接口 List接口 允许有重复的元素,元素按照添加的 ...

  4. 【Java学习笔记】Map借口的子接口----HashMap

    存储在HashMap集合中的元素,必须覆盖hashCode和equals方法(与HashSet类似)   import java.util.HashMap; import java.util.Iter ...

  5. Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

    规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...

  6. Java学习笔记31(集合框架五:set接口、哈希表的介绍)

    set接口的特点: 1.不包含重复元素 2.set集合没有索引,只能用迭代器或增强for循环遍历 3.set的底层是map集合 方法和Collection的方法基本一样 set接口的实现类HashSe ...

  7. 5.2类集(java学习笔记)Map,Set接口

    一.Map接口 Map接口中存储数据是通过key->value的方式成对存储的,可以通过key找到value. 二.Map接口常用子类 1.HashMap HashMap是无序存放的,key不允 ...

  8. 【Java学习笔记】Map

    Map: 一次添加一对元素,也称为双列集合. 而Collection,一次添加一个元素,称为单列集合. 常用方法: 1.添加 value  put(key,value);        返回前一个与k ...

  9. Java学习笔记-基础语法Ⅶ-集合

    集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...

随机推荐

  1. 文件名简体转繁体bat

    @echo off rem 指定文件夹路径 set "fd=D:\下载的图片" rem 0为转换文件名,1为转换文件夹名,2为同时转换文件名和文件夹名 set f=0 rem 0为 ...

  2. sql语句的各种模糊查询语句

    一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况 ...

  3. 错误:this is incompatible with sql_mode=only_full_group_by

    Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'H5APP_WORK ...

  4. TOR的十个最好的替代工具

    TOR的十个最好的替代工具: 一.Comodo Dragon(基于Chromium) TOR基于Firefox,因为我们换个口味,首先推荐一个基于开源项目Chromium的Comodo Dragon, ...

  5. Windows定位窗口对应的exe文件

    一.说明 以下两种情况我们会想要定位窗口是由哪个exe文件,或者什么命令启用 第一种是:广告窗口,现在经常时不时冒出一个广告窗口,要么是完全看不出哪个程序启动,要么是虽然大概知道是哪个应用启动(比如w ...

  6. 返回JSON格式(二十五)

    在上述例子中,通过@ControllerAdvice统一定义不同Exception映射到不同错误处理页面.而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这 ...

  7. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

    Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等. 如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的 ...

  8. Eclipse Mars-Ant无法使用jre1.6的问题

    https://www.jianshu.com/p/24b9517d7f43 Eclipse 升级到Mars 4.5.1版本后,老项目使用jdk1.6,通过ant编译jar时,会遇到如下问题: 使用j ...

  9. day22 模块_1

    核能来袭--模块 1.简单了解模块 2.Collections 3.Time模块 4.functools 一.初识模块 其实之前写的每一个PY文件都是一个模块 还有一些我们一直在使用的模块  buil ...

  10. java Calendar类得到每个月的周末是几号的工具方法

    public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...