Java_Map_Map详解
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详解相关推荐
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- docker常用命令详解
docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...
- 通俗易懂word2vec详解词嵌入-深度学习
https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- CUDA之nvidia-smi命令详解---gpu
nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...
- Bert代码详解(一)重点详细
这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...
- CRF(条件随机场)与Viterbi(维特比)算法原理详解
摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...
- pytorch nn.LSTM()参数详解
输入数据格式: input(seq_len, batch, input_size) h0(num_layers * num_directions, batch, hidden_size) c0(num ...
最新文章
- 人均年薪400万、公司年亏40亿,正在盖大楼的DeepMind最新财务数据曝光
- 不能上网--只要四步判断出故障所在
- 判断两个数组内容是否相同
- 设置Tomcat字符集为utf-8
- Kafka集群部署详细步骤(包含zookeeper安装步骤)
- C++总结笔记(八)—— 菱形继承
- BZOJ4590: [Shoi2015]自动刷题机
- 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
- java 中for循环中重复定义的变量 为什么不报错?
- byte转换字符串(string)+字符串转换byte
- element-UI-tab选项卡
- 《C++ Primer 第5版》-13.3交换操作-康奈尔笔记
- linux打开xml文件,xml文件扩展名,xml文件怎么打开?
- 正交匹配追踪算法OMP(Orthogonal Matching Pursuit)
- 计算机财务管理第五版第四章课后答案,计算机财务管理习题精简版
- IDEA设置背景和定时更换背景
- 计算机辅助工装设计的应用研究,计算机辅助工装设计与管理.PPT
- 苏宁 android面试题,苏宁面试题.doc
- Win10更新完毕。C盘图片已经微信缓存全部消失如何解决?
- 绿盟科技c语言笔试,绿盟科技全国统一笔试题
热门文章
- 「干货」12.5米数字高程DEM专题图制作教程
- 可见性,原子性,有序性的源头(一)
- 认识Android(常用布局,控件,四大组件,动画,自定义控件及异常消息处理机制)
- Redis简介(01)历史与发展
- 欧洲CE认证电磁兼容EMC测试
- uni-app开发微信小程序常见问题(更新版):uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?
- 联想r720安装固态_联想拯救者r720笔记本NVME接口M.2固态硬盘怎么安装win7系统
- quartus II使用
- 微信小程序云开发定时推送订阅消息
- vue3 setup语法糖下父组件调用子组件的方法