1.Map概述

Map<K,V>  Map集合类用于存储元素对(称作键和值),其中每个键映射到一个值,该接口描述了从不重复的键到值的映射。

2.Map子类

1).HashTable,底层是哈希表数据结构,不可以存入null键和null值,线程同步,JDK1.0效率低;
    2).HashMap,底层是哈希表数据结构,可以存入null键和null值,不同步,JDK1.2效率高;
    3).TreeMap,底层是二叉树数据结构,线程不同步,可以用于Map排序.

3.Map集合转为Set集合

1).Set<K>keySet(),将所有的键存入Set集合,再使用迭代器获取value值
    2).Set<Map.Entry<K,V>>entrySet(), entrySet()方法返回一个实现Map.Entry接口的Set集合,集合中存放的是键/值对应关系,该关系是Map.Entry型。其中Entry是Map接口的内部接口。
        Map.Entry提供的方法:
            A)getKey(): 返回条目的关键字
            B)getValue(): 返回条目的值

4.Map常见操作

1).添加操作:
        V put(K key, V value):如果key已存在,在关联后,返回替换前该key对应的value值,如果不存在,则返回null;
        void putAll(Map t):将来自特定映像的所有元素添加给该映像.
    2).删除操作:
        V remove(Object key):从此映射中移除指定键的映射关系(如果存在),不存在则返回null;
        void clear() :从此映射中移除所有映射关系. 
    3).查询操作:
        V get(key): 获得与关键字key相关的值,并且返回与关键字key相关的对象,如果没有该关键字,则返回null;判断key是否存在,可以通过返回值是否等于null
        boolean containsKey(key): 判断映像中是否存在关键字key;
        boolean containsValue(Object value): 判断映像中是否存在值value;
        int size(): 返回当前映像中映射的数量;
        boolean isEmpty(): 判断映像中是否有任何映射.
        Collection values():返回映像中所有value值的集,由于值多个,用Collection集合,对其操作可以使用Collection基本方法.

5.Map简单应用

  1. import java.util.*;
  2. //Strawberry2013-04-29
  3. class MapDemo
  4. {
  5. public static void main(String[] args)
  6. {
  7. Map<String, String> mp = new HashMap<String, String>();
  8. mp.put("02", "zhangsan");
  9. mp.put("01", "lisi");
  10. mp.put("04", "wangwu");
  11. //System.out.println(mp.put("01", "lisi"));     如果key已存在,在关联后,返回替换前该key对应的value值
  12. //System.out.println(mp.put("01", "li33si"));   如果不存在,则返回null
  13. ////////////////////////////////////////////////////
  14. Set<String> setmap = mp.keySet();             //**(1)keySet()取出方式
  15. Iterator<String> it = setmap.iterator();
  16. while(it.hasNext())
  17. {
  18. System.out.println(mp.get(it.next()));  //有了键值key=it.next(),再使用get()方法获得value值
  19. }
  20. ////////////////////////////////////////////////////
  21. Set<Map.Entry<String, String>> entrySet = mp.entrySet();//**(2)entrySet()取出方式
  22. Iterator<Map.Entry<String, String>> it2 = entrySet.iterator();//Entry是Map接口中的内部接口
  23. while(it2.hasNext())
  24. {
  25. Map.Entry<String, String> e = it2.next();
  26. System.out.println(e.getKey() +":"+ e.getValue());  //getKey(),getValue是Map.Entry接口提供的方法
  27. }
  28. }
  29. }
  1. /*
  2. 要求:
  3. 每个学生都有属性,姓名 年龄(姓名年龄作为主键)对应有归属地
  4. Strawberry2013-4-29
  5. */
  6. import java.util.*;
  7. class Student
  8. {
  9. private int age;
  10. private String name;
  11. Student(String name, int age)
  12. {
  13. this.name = name;
  14. this.age = age;
  15. }
  16. public String getName()
  17. {
  18. return name;
  19. }
  20. public int getAge()
  21. {
  22. return age;
  23. }
  24. public int hashCode()
  25. {
  26. return name.hashCode()+age*17;
  27. }
  28. public boolean equals(Object obj)
  29. {
  30. if(!(obj instanceof Student))
  31. throw new ClassCastException("error!");
  32. Student s = (Student)obj;
  33. return this.age==s.age && this.name.equals(s.name);
  34. }
  35. }
  36. class MapDemo2
  37. {
  38. public static void main(String[] args)
  39. {
  40. HashMap<Student, String> hm = new HashMap<Student, String>();
  41. hm.put(new Student("java02", 10), "Beijing");
  42. hm.put(new Student("java04", 40), "Wuhan");
  43. hm.put(new Student("java01", 4), "Zhengzhou");
  44. Set<Student> s1 = hm.keySet();                        //keySet()取出方式
  45. Iterator<Student> it1 = s1.iterator();
  46. while(it1.hasNext())
  47. {
  48. Student t1 = it1.next();
  49. System.out.println(t1.getName()+" "+ t1.getAge() +" "+ hm.get(t1));
  50. }
  51. Set<Map.Entry<Student, String>> s2 = hm.entrySet(); //entrySet()取出方式
  52. Iterator<Map.Entry<Student, String>> it2 = s2.iterator();
  53. while(it2.hasNext())
  54. {
  55. Map.Entry<Student, String> mp = it2.next();
  56. System.out.println(mp.getKey().getName()+".."+ mp.getKey().getAge() +".."+ mp.getValue());
  57. }                       //获取key值    和value值
  58. }
  59. }
  1. /*
  2. 要求:
  3. 一字符串分别输出该字符串每个字符出现的次数
  4. Strawberry2013-4-29
  5. */
  6. import java.util.*;
  7. class MapDemo2
  8. {
  9. public static void main(String[] args)
  10. {
  11. String str = "abddkdsadjljasdak";
  12. char[] ch = str.toCharArray();
  13. TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>(new Comp());
  14. //此处泛型应该使用类名,不可以使用TreeMap<char, int>
  15. for(int i=0; i<str.length(); i++)
  16. {
  17. if(hm.get(ch[i]) == null)
  18. hm.put(ch[i], 1);
  19. else
  20. hm.put(ch[i], hm.get(ch[i])+1);
  21. }
  22. Set<Character> s = hm.keySet();
  23. Iterator<Character> it = s.iterator();
  24. while(it.hasNext())
  25. {
  26. char c = it.next();
  27. System.out.print(c +"("+ hm.get(c) +") ");
  28. }
  29. }
  30. }
  31. class Comp implements Comparator<Character>   //定义一个比较器,使其按降序排列
  32. {
  33. public int compare(Character c1, Character c2)
  34. {
  35. return c2.compareTo(c1);
  36. }
  37. }
    1. /*
    2. 要求:
    3. 一个学校 有n多个教室, 一个教室有n多个学生
    4. Strawberry2013-4-29
    5. 分析:
    6. 一个学校和n多个教室是实际存在的事先必须定义完全,在使用school.put()来关联学校和教室
    7. */
    8. import java.util.*;
    9. class MapDemo2
    10. {
    11. public static void main(String[] args)
    12. {
    13. Comp comp = new Comp();         //定义一个比较器,降序排列
    14. TreeMap<String, TreeMap<String, String>> school = new TreeMap<String, TreeMap<String, String>>();   //默认序列
    15. TreeMap<String, String> room1 = new TreeMap<String, String>(comp);  //降序
    16. TreeMap<String, String> room2 = new TreeMap<String, String>(comp);
    17. TreeMap<String, String> room3 = new TreeMap<String, String>(comp);
    18. school.put("class01", room1);   //关联教室与学校
    19. school.put("class02", room2);
    20. school.put("class03", room3);
    21. room1.put("04","zhang");        //关联学生和教室
    22. room1.put("02","li");
    23. room2.put("01","liu");
    24. room2.put("02","zhang");
    25. room3.put("07","wang");
    26. room3.put("03","zhao");
    27. Iterator<String> it1 = school.keySet().iterator();    //遍历教室
    28. while(it1.hasNext())
    29. {
    30. String className = it1.next();
    31. TreeMap<String, String> c = school.get(className);
    32. System.out.println(className +"....");
    33. Iterator<String> it2 = c.keySet().iterator(); //遍历学生
    34. while(it2.hasNext())
    35. {
    36. String studentId = it2.next();
    37. System.out.println(studentId +","+ c.get(studentId));
    38. }
    39. }
    40. }
    41. }
    42. class Comp implements Comparator<String>                  //String比较器类
    43. {
    44. public int compare(String s1, String s2)
    45. {
    46. return s2.compareTo(s1);
    47. }
    48. }

Java_Map_Map详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  9. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. JQuery 菜鸟笔记(一)

    什么是JQuery JQuery是一个优秀的javascript类库,jQuery以其简洁.快速等优点征服了众多javascript开发者.jQuery使用户能更方便地处理DOM.events.实现动 ...

  2. seajs hello world

    http://localhost/seajs/index.html <!doctype html> <head> <title>Hello Seajs</ti ...

  3. Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds -----》myeclipse2015

    错误:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 错误提示就是我们限定了部署的时间导致的错 ...

  4. 17. Letter Combinations of a Phone Number

    题目: Given a digit string, return all possible letter combinations that the number could represent. A ...

  5. nmon的安装

    安装 mkdir /usr/local/nmon cd /usr/local/nmon wget http://sourceforge.net/projects/nmon/files/nmon_lin ...

  6. Delphi多线程编程--线程同步的方法(事件、互斥、信号、计时器)简介

    更详细的可以参考:http://www.cnblogs.com/xumenger/p/4450659.html 或者参考之后的博客 四个系统内核对象(事件.互斥.信号.计时器)都是线程同步的手段,从这 ...

  7. HTML5本地存储——Web SQL Database

    在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...

  8. 百度地图-省市县联动加载地图 分类: Demo JavaScript 2015-04-26 13:08 530人阅读 评论(0) 收藏

    在平常项目中,我们会遇到这样的业务场景: 客户希望把自己的门店绘制在百度地图上,通过省.市.区的选择,然后加载不同区域下的店铺位置. 先看看效果图吧: 实现思路: 第一步:整理行政区域表: 要实现通过 ...

  9. Excel word “由于本机的限制_该操作已被取消_请与管理员联系”的已生效解决办法 (转 )

    正常解决方法: 1.打开开始菜单,在运行里输入regedit,回车 2.在注册表中,导航到HKEY_CURRENT_USER\Software\Classes\.html 项 3.在默认项上点右键选择 ...

  10. MySQL - 问题集 - "Waiting for table metadata lock"(待完善)

    待完善.show processlist; 可参考1:http://blog.csdn.net/huochuangchuang/article/details/49423893 可参考2:http:/ ...