本博客为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/8867065

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简单应用

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

Java_Map_Map详解相关推荐

  1. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  2. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  3. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  4. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  5. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  6. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  7. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

  8. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  9. pytorch nn.LSTM()参数详解

    输入数据格式: input(seq_len, batch, input_size) h0(num_layers * num_directions, batch, hidden_size) c0(num ...

最新文章

  1. 人均年薪400万、公司年亏40亿,正在盖大楼的DeepMind最新财务数据曝光
  2. 不能上网--只要四步判断出故障所在
  3. 判断两个数组内容是否相同
  4. 设置Tomcat字符集为utf-8
  5. Kafka集群部署详细步骤(包含zookeeper安装步骤)
  6. C++总结笔记(八)—— 菱形继承
  7. BZOJ4590: [Shoi2015]自动刷题机
  8. 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
  9. java 中for循环中重复定义的变量 为什么不报错?
  10. byte转换字符串(string)+字符串转换byte
  11. element-UI-tab选项卡
  12. 《C++ Primer 第5版》-13.3交换操作-康奈尔笔记
  13. linux打开xml文件,xml文件扩展名,xml文件怎么打开?
  14. 正交匹配追踪算法OMP(Orthogonal Matching Pursuit)
  15. 计算机财务管理第五版第四章课后答案,计算机财务管理习题精简版
  16. IDEA设置背景和定时更换背景
  17. 计算机辅助工装设计的应用研究,计算机辅助工装设计与管理.PPT
  18. 苏宁 android面试题,苏宁面试题.doc
  19. Win10更新完毕。C盘图片已经微信缓存全部消失如何解决?
  20. 绿盟科技c语言笔试,绿盟科技全国统一笔试题

热门文章

  1. 「干货」12.5米数字高程DEM专题图制作教程
  2. 可见性,原子性,有序性的源头(一)
  3. 认识Android(常用布局,控件,四大组件,动画,自定义控件及异常消息处理机制)
  4. Redis简介(01)历史与发展
  5. 欧洲CE认证电磁兼容EMC测试
  6. uni-app开发微信小程序常见问题(更新版):uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?
  7. 联想r720安装固态_联想拯救者r720笔记本NVME接口M.2固态硬盘怎么安装win7系统
  8. quartus II使用
  9. 微信小程序云开发定时推送订阅消息
  10. vue3 setup语法糖下父组件调用子组件的方法