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")); 如果不存在,则返回null
- ////////////////////////////////////////////////////
- Set<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);
- else
- hm.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详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- 我与A协
大学毕业以后发现离曾经的圈子越来越远,非常怀念原来在A协和大家一起奋斗的日子,在这里写一篇文章,献给有很多美好回忆的A协,也献给渐渐远离A协的我. 首先,回顾一下我为什么会参与到A协的建设工作中来.我 ...
- 【目录】Leetcode
Leetcode 1.动态规划 Palindrome Partitioning II(hard) ☆ Distinct Subsequences(hard) Edit Distance (hard) ...
- LNMP平台搭建---MySQL安装篇
在前两篇中,安装了一个基本的Web服务器,但是只能提供静态网页查看,要做成动态网站,就必须要数据库或其他编程语言支持了,这里先介绍MySQL数据库的安装. MySQL是一个开源的数据库,在互联网行业应 ...
- Lattice FPGA 板子 调试笔记
最近在调试LATTICE FPGA 做的视频板子,颇不顺利,所以记录下来作为以后的参考: 1.FPGA的IO口不是所有的都是双向的,有些有特殊作用的是单向的. 在查阅 LatticeECP3-17E ...
- UltraEdit 注册机使用说明
请断开网络连接(或直接拔掉网线)后执行: 安装完成后,点击弹出界面的“注册”按钮,然后直接点击“激活”,此时UltraEdit检测到网络断开则弹出界面提示“脱机激活”,此时启动注册机,并将UltraE ...
- jquery placeholder
/* * @author ambar * html5 placeholder pollfill * - 使用绝对定位内嵌层 * - 也适用于密码域 * 目标浏览器: IE 6~9, FF 3.5 */ ...
- [.NET]二维码生成
又好一段时间没有写写东西了,继续回归原来的模式,多做记录,最近要实现个unity的二维码方面的功能,首先就要解决生成二维码的问题,这个倒是有这方面的组件,然后我通过强大的反编译工具Reflector( ...
- nuget packages batch install
d:\nuget\nuget.exe install EnterpriseLibrary.Common -NoCache -Verbosity detailed -OutputDirectory D: ...
- 开发常用之在webstorm中使用cmd
而今前端开发经常与cmd打交道,如使用个npm什么的,如果老是在ide和cmd之间切换显得比较繁琐,众多前端利器中我最喜欢的就是webstorm,而webstorm中就可以直接使用cmd,如图1, ...
- windows消息钩子注册底层机制浅析
标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...