TestMap
public class TestMap {
public static void main(String[] args) { Map map=new HashMap();
//在此映射中关联指定值与指定键。
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value2");
map.put("key4", "value4");
map.put("key5", "value5");
map.put("key6",null);
map.put(null,null); System.out.println(map.size());
System.out.println(map.get(null)); for(int i=1;i<map.size();i++){
System.out.println(map.get(i));
} Iterator it=map.keySet().iterator();
while(it.hasNext()){
Object key=it.next();
Object value=map.get(key);
System.out.println("key="+key+"-->"+"value="+value);
} Iterator itt=map.entrySet().iterator();
while(itt.hasNext()){
System.out.println(itt.next());
}
Iterator it2=map.entrySet().iterator();
while(it2.hasNext()){
Map.Entry key=(Map.Entry) it2.next();
System.out.println("key="+key.getKey()+"-->"+"value="+key.getValue());
} }
}
HashMap
package com.example.demo; import org.testng.annotations.Test; import java.util.HashMap; public class TestHashMap { @Test(description = "Hashmap的存值")
public void TestPut() {
///*Integer*/map.put("1", 1);
// 向map中添加值(返回这个key以前的值,如果没有返回null)
HashMap<String, Integer> map=new HashMap<>();
Integer flag_a = map.put("1", 1);
Integer flag_b = map.put("1", 2);
System.out.println(flag_a);//null
System.out.println(flag_b);//1
} @Test(description = "Hashmap的取值")
public void TestGet() {
HashMap<String, Integer> map=new HashMap<>();
map.put("key", 1);
/*Value的类型*///得到map中key相对应的value的值
System.out.println(map.get("1"));//null
System.out.println(map.get("key"));//1
} @Test(description = "Hashmap的判断为空")
public void TestCheckEmpty() {
HashMap<String, Integer> map=new HashMap<>();
/*boolean*///判断map是否为空
System.out.println(map.isEmpty());//true
map.put("key", 1);
System.out.println(map.isEmpty());//false
} @Test(description = "Hashmap判断是否含有key")
public void TestCheckKey() {
HashMap<String, Integer> map=new HashMap<>();
/*boolean*///判断map中是否存在这个key
System.out.println(map.containsKey("key"));//false
map.put("key", 1);
System.out.println(map.containsKey("key"));//true
} @Test(description = "Hashmap判断是否含有value")
public void TestCheckValue() {
HashMap<String, Integer> map=new HashMap<>();
/*boolean*///判断map中是否存在这个value
boolean flag_a = map.containsValue(1);
System.out.println(flag_a);//false
map.put("key", 1);
boolean flag_b = map.containsValue(1);
System.out.println(flag_b);//true
} @Test(description = "Hashmap删除这个key值下的value")
public void TestDelValue() {
HashMap<String, Integer> map=new HashMap<>();
/*Integer*///删除key值下的value
Integer result =map.remove("key1");
System.out.println(result);//null
map.put("key1", 2);
System.out.println(map.remove("key1"));//2(删除的值)
} @Test(description = "Hashmap显示所有的value值")
public void TestGetAllValue() {
HashMap<String, Integer> map=new HashMap<>();
/*Collection<Integer>*///显示所有的value值
System.out.println(map.values());//[]
map.put("key1", 1);
map.put("key2", 2);
System.out.println(map.values());//[1, 2]
} @Test(description = "Hashmap的元素个数")
public void TestGetNumber() {
HashMap<String, Integer> map=new HashMap<>();
/*int*///显示map里的值得数量
System.out.println(map.size());//0
map.put("key1", 1);
System.out.println(map.size());//1
map.put("key2", 2);
System.out.println(map.size());//2
} @Test(description = "Hashmap删除这个key值下的value")
public void TestDelKeysValue() {
HashMap<String, Integer> map=new HashMap<>();
/*SET<String>*///显示map所有的key
System.out.println(map.keySet());//[]
map.put("key1", 1);
System.out.println(map.keySet());//[key1]
map.put("key2", 2);
System.out.println(map.keySet());//[key1, key2]
} @Test(description = "Hashmap删除这个key值下的value")
public void TestShow() {
HashMap<String, Integer> map=new HashMap<>();
/*SET<map<String,Integer>>*///显示所有的key和value
System.out.println(map.entrySet());//[]
map.put("key1", 1);
System.out.println(map.entrySet());//[key1=1]
map.put("key2", 2);
System.out.println(map.entrySet());//[key1=1, key2=2]
} @Test(description = "Hashmap添加另一个同一类型的map下的所有内容")
public void TestContainShow() {
HashMap<String, Integer> map=new HashMap<>();
HashMap<String, Integer> map1=new HashMap<>();
/*void*///将同一类型的map添加到另一个map中
map1.put("key11", 1);
map.put("key", 2);
System.out.println(map);//{key=2}
map.putAll(map1);
System.out.println(map);//{key11=1, key11=2}
} @Test(description = "Hashmap删除这个key和value")
public void TestDelKeyandValue() {
HashMap<String, Integer> map=new HashMap<>();
/*boolean*///删除这个键值对
map.put("TestDelKeyandValue1", 1);
map.put("TestDelKeyandValue2", 2);
System.out.println(map);//{DEMO1=1, DEMO2=2}
System.out.println(map.remove("TestDelKeyandValue2", 1));//false
System.out.println(map.remove("TestDelKeyandValue2", 2));//true
System.out.println(map);//{TestDelKeyandValue1=1}
} @Test(description = "Hashmap替换这个key的value:(java8)")
public void TestReplaceValue() {
HashMap<String, Integer> map=new HashMap<>();
/*value*///判断map中是否存在这个key
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
System.out.println(map);//{key1=1, key2=2}
System.out.println(map.replace("key2", 22));//2
System.out.println(map.replace("key3", 33));//3
System.out.println(map);//{key1=1, key2=22}
} @Test(description = "清空这个hashmap")
public void TestClear() {
HashMap<String, Integer> map=new HashMap<>();
/*void*///清空map
map.put("key1", 1);
map.put("key2", 2);
System.out.println(map);//{key1=1, key2=2}
map.clear();//2
System.out.println(map);//{}
} @Test(description = "Hashmap的克隆")
public void TestClone() {
HashMap<String, Integer> map=new HashMap<>();
/*object*///克隆这个map
map.put("DEMO1", 1);
map.put("DEMO2", 2);
System.out.println(map.clone());//{DEMO1=1, DEMO2=2}
Object clone = map.clone();
System.out.println(clone);//{DEMO1=1, DEMO2=2}
} }
(java8新增方法)
如果当前 Map
不存在键 key 或者该 key 关联的值为 null
,那么就执行 put(key, value)
;否则,便不执行 put
操作
public static void main(String[] args) {
HashMap<String, Integer> map=new HashMap<>();
/*boolean*///判断map中是否存在这个key
map.put("DEMO1", 1);
map.put("DEMO2", 2);
System.out.println(map);//{DEMO1=1, DEMO2=2}
System.out.println(map.putIfAbsent("DEMO1", 12222));//1
System.out.println(map.putIfAbsent("DEMO3", 12222));//null
System.out.println(map);//{DEMO1=1, DEMO2=2}
}
如果当前 Map
的value为xx时则值为xx否则为xx:(java8新增方法)compute
方法更适用于更新 key 关联的 value 时,新值依赖于旧值的情况
public static void main(String[] args) {
HashMap<String, Integer> map=new HashMap<>();
/*boolean*///当这个value为null时为1,否则为3
map.put("DEMO1", 1);
map.put("DEMO2", 2);
System.out.println(map);//{DEMO1=1, DEMO2=2}
map.compute("DEMO2", (k,v)->v==null?1:3);
System.out.println(map);//{DEMO1=1, DEMO2=3}
}
我们提一个需求:给定一个 List<String>,统计每个元素出现的所有位置。
比如,给定 list:["a", "b", "b", "c", "c", "c", "d", "d", "d", "f", "f", "g"] ,那么应该返回:
a : [0]
b : [1, 2]
c : [3, 4, 5]
d : [6, 7, 8]
f : [9, 10]
g : [11]
很明显,我们很适合使用 Map 来完成这件事情:
package com.example.demo; import java.util.*; public class TestSort { public static Map<String, List<Integer>> getElementPositions(List<String> list) {
Map<String, List<Integer>> positionsMap = new HashMap<>(); for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
List<Integer> positions = positionsMap.get(str); if (positions == null) { // 如果 positionsMap 还不存在 str 这个键及其对应的 List<Integer>
positions = new ArrayList<>(1);
positionsMap.put(str, positions); // 将 str 及其对应的 positions 放入 positionsMap
} positions.add(i); // 将索引加入 str 相关联的 List<Integer> 中
} return positionsMap;
} public static void main(String[] args) throws Exception {
List<String> list = Arrays.asList("a", "b", "b", "c", "c", "c", "d", "d", "d", "f", "f", "g"); System.out.println("使用 Java8 之前的 API:");
Map<String, List<Integer>> elementPositions = getElementPositions(list);
System.out.println(elementPositions);
}
}
Java8 时,Map<K, V> 接口添加了一个新的方法,putIfAbsent(K key, V value),功能是:
如果当前 Map 不存在键 key 或者该 key 关联的值为 null,那么就执行 put(key, value);否则,便不执行 put 操作
package com.example.demo; import java.util.*; public class TeatSort2 { public static Map<String, List<Integer>> getElementPositions(List<String> list) {
Map<String, List<Integer>> positionsMap = new HashMap<>(); for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
positionsMap.putIfAbsent(str, new ArrayList<>(1)); // 如果 positionsMap 不存在键 str 或者 str 关联的 List<Integer> 为 null,那么就会进行 put;否则不执行 put
positionsMap.get(str).add(i);
} return positionsMap;
} public static void main(String[] args) throws Exception {
List<String> list = Arrays.asList("a", "b", "b", "c", "c", "c", "d", "d", "d", "f", "f", "g"); System.out.println("使用 putIfAbsent:");
Map<String, List<Integer>> elementPositions = getElementPositions(list);
System.out.println(elementPositions);
}
}
https://segmentfault.com/a/1190000007838166
TestMap的更多相关文章
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- 4. ValueStack 和 OGNL
1. 属性哪来的 当我们通过Action处理完用户请求以后,可以直接在页面中获取到 action 的属性值. 如果我们在页面中尝试遍历四个域中的属性,会发现域中并没有username之类的Action ...
- Spring MVC学习
SpringMVC框架 转载请注明出处 目录 一:配置springMVC开发环境 1.1.配置文件的helloworld 1.2.基于注解的helloworld 二:@RequestMapping详解 ...
- Strust OGNL详解
首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...
- RedisUtil 工具类
package com.test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import red ...
- Spring + Jedis集成Redis(集群redis数据库)
前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
- 跟我一起数据挖掘(21)——redis
什么是Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
随机推荐
- html的基本语法
- python-----编写接口,使用postman与soapiu与jemeter访问调用
实例:自己写一个注册接口 输入用户名.密码.验证码,当满足注册将密码进行md5加密. 场景 接口返回参数 提示 用户名存在 2000 exit 用户已存在 密码与验证码不相等 3000 wrong 密 ...
- 使用jsonp请求本地json文件
使用jsonp解决请求本地文件跨域问题 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- nginx基本用法和HTTPS配置
nginx作用讲解:1.反向代理:需要多个程序共享80端口的时候就需要用到反向代理,nginx是反向代理的一种实现方式.2.静态资源管理:一般使用nginx做反向代理的同时,应该把静态资源交由ngin ...
- mybatis入门--配置
1.导入jar包 mybatis-x.x.x.jar 导入到lib目录下, 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <depen ...
- Windows路由表
对于路由器的路由表,网管都很熟悉,但是windows的路由表,可能了解的人就相对少一些.今天我们就一起来看看windows路由表. 一.windows路由表 1.使用命令 route print 查看 ...
- oracle 新建用户后赋予的权限语句
grant create session,resource to itsys; grant create table to itsys;grant resource to itsys;grant cr ...
- 家庭记账本之微信小程序(四)
json的学习 JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小. ...
- JS关键字和保留字汇总(小记)
ECMA-262 描述了一组具有特定用途的关键字.这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符.以下就是ECMAScript的全部关 ...
- sql 存储过程参数为空则不作为条件
/****** Object: StoredProcedure [dbo].[GetCommonGroupByRegion] Script Date: 03/23/2017 17:31:18 **** ...