Map集合
1:Map
(1)将键映射到值的对象。
一个映射不能包含重复的键;每个键最多只能映射到一个值。
键值对的方式存在
(2)Map和Collection的区别?
A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍
(3)Map接口功能概述
A:添加功能 put();
B:删除功能 remove(key);
C:判断功能
containsKey(key);判断是否包含key键
containsValue(value);判断是否包含值
D:获取功能
get(key);
values();
E:长度功能
size();
(4)Map集合的遍历
A:键找值
a:获取所有键的集合
b:遍历键的集合,得到每一个键
c:根据键到集合中去找值
B:键值对对象找键和值
a:获取所有的键值对对象的集合
b:遍历键值对对象的集合,获取每一个键值对对象
c:根据键值对对象去获取键和值
hashMap 无序唯一
代码体现:
Map<String,String> hm = new HashMap<String,String>();
hm.put("it002","hello");
hm.put("it003","world");
hm.put("it001","java");
//方式1 键找值
Set<String> set = hm.keySet();
for(String key : set) {
String value = hm.get(key);
System.out.println(key+"---"+value);
}
//方式2 键值对对象找键和值
Set<Map.Entry<String,String>> set2 = hm.entrySet();
for(Map.Entry<String,String> me : set2) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"---"+value);
}
(5)案例
A:统计一个字符串中每个字符出现的次数
String str="abcdefabcdefabcdef";
//将字符串转化为字符数组
char[] c=str.toCharArray();
//创建map集合
Map<String,Integer> map=new LinkedHashMap<String,Integer>();
//遍历字符数组
for (int i = 0; i < c.length; i++)
{
/*已经存在
* 给value加一
* 不存在
* 给集合key值
* */
if (map.containsKey(String.valueOf(c[i])))
{
//修改
map.put(String.valueOf(c[i]),map.get(String.valueOf(c[i]))+1);
}
else{
map.put(String.valueOf(c[i]),1);
}
}
//方法一
Set<Map.Entry<String,Integer>> set=map.entrySet();
for (Map.Entry<String,Integer> mapkey : set)
{
System.out.println(mapkey);
}
B:集合的嵌套遍历
a:多层嵌套
Map<String,LinkedHashMap<Integer,LinkedHashMap<Integer,String>>> map=new LinkedHashMap<String,LinkedHashMap<Integer,LinkedHashMap<Integer,String>>>();
LinkedHashMap<Integer,String> map2=new LinkedHashMap<Integer,String>();
LinkedHashMap<Integer,LinkedHashMap<Integer,String>> map1=new LinkedHashMap<Integer,LinkedHashMap<Integer,String>>();
map.put("1", map1);
map1.put(1, map2);
map2.put(1, "str");
Set<Map.Entry<String,LinkedHashMap<Integer,LinkedHashMap<Integer,String>>>> set=map.entrySet();
Set<Entry<Integer,LinkedHashMap<Integer,String>>> set2 = map1.entrySet();
Set<Entry<Integer,String>> set3 = map2.entrySet();
for (Map.Entry<String,LinkedHashMap<Integer,LinkedHashMap<Integer,String>>> mapkey : set)
{System.out.println(mapkey);
for (Entry<Integer, LinkedHashMap<Integer, String>> map1key : set2)
{System.out.println(map1key);
for (Entry<Integer, String> map2key : set3)
{
System.out.println(map2key);
}
}
}
输出结果:
1={1={1=str}}
1={1=str}
1=str
TreeMap 有序唯一
TreeMap<Integer,String> map=new TreeMap<Integer, String>(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return -1;
}
});
map.put(1, "str");
map.put(2, "str");
map.put(4, "str");
map.put(3, "str");
map.put(5, "str");
Set<Entry<Integer,String>> set = map.entrySet();
for (Entry<Integer, String> map2key : set)
{
System.out.println(map2key);
}
输出:
5=str
3=str
4=str
2=str
1=str
默认排序是升序,加上比较器会按照自己的方式进行排序
Map集合的更多相关文章
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
- MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)
一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...
- Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、
特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣) ...
- java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)
import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...
- Java集合类学习笔记(Map集合)
Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...
- java学习第18天(map集合)
Map集合是将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 存储的是键值对形式的元素,键唯一,值可以重复,有点类似于数据库中的主键加数据.主要功能有: A:添加功能 put ...
- Map集合 总结
(本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢.) Java的集合类可分为Set.List.Map.Queue,其中Set.List.Queue都有共同 ...
- Map集合的应用及其遍历方式
---> HashMap :底层基于哈希表 存储原理也使用哈希表来存放的: 往HashMap添加了元素 ,首先会调用键的hashCode方法 获得一个哈希值,然后 ...
随机推荐
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- 微信小程序初探
做为码农相信大家最近肯定都会听到微信小程序,虽然现阶段还没有正式开放注册,但大家可以还是可以开发测试. 到微信的WIKI(http://mp.weixin.qq.com/wiki?t=resource ...
- java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)
一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...
- T-SQL学习记录
T-sql是对SQL(structure query language )的升级.可以加函数. 系统数据库:master管理数据库.model模版数据库,msdb备份等操作需要用到的数据库,tempd ...
- TCP/IP之TCP_NODELAY与TCP_CORK
TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...
- php利用root权限执行shell脚本
vi /etc/sudoers , 为apache用户赋予root权限,并且不需要密码,还有一步重要的修改(我被困扰的就是这个地方) root ALL=(ALL) ALL apache ALL= ...
- 设置WindowServer2012 时间同步NTP
在powershell中以管理员身份运行以下命令即可 w32tm /config /manualpeerlist:pool.ntp.org /syncfromflags:MANUAL Stop-Ser ...
- XSS 前端防火墙 —— 天衣无缝的防护
上一篇讲解了钩子程序的攻防实战,并实现了一套对框架页的监控方案,将防护作用到所有子页面. 到目前为止,我们防护的深度已经差不多,但广度还有所欠缺. 例如,我们的属性钩子只考虑了 setAttribut ...
- mono for android学习过程系列教程(1)
直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...
- Angular2学习笔记——在子组件中拿到路由参数
工作中碰到的问题,特此记录一下. Angular2中允许我们以`path\:id\childPath`的形式来定义路由,比如: export const appRoutes: RouterConfig ...