使用HashMap须要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()
2023-09-14 09:07:59 时间
Map/HashMap是java中一种非经常常使用的数据结构,一般我们在应用中做的事情就是调用put向容器写入数据或者是get从容器读取数据。
Map.entrySet()这种方法返回了键值对的集合,也是JDK官方推荐的遍历Map的方式。
Set<Map.Entry<String, String>> allEntrys = maps.entrySet(); for (Map.Entry<String, String> as : allEntrys) { String key = as.getKey(); String value = as.getValue(); }
public static void main(String[] args) throws Exception { HashMap<String, String> maps = new HashMap<String, String>(); maps.put("name", "xiu"); maps.put("age", "25"); System.out.println(maps);// {age=25, name=xiu} Set<Map.Entry<String, String>> allEntrys = maps.entrySet(); Map.Entry<String, String> nameEntry = null; for (Map.Entry<String, String> as : allEntrys) { String key = as.getKey(); if (key.equals("name")) { nameEntry = as; } } // 删除entry allEntrys.remove(nameEntry); System.out.println(maps);// {age=25} }非常明显,我们通过Map.entrySet()的返回结果,可以删除原始HashMap中存储的键值对。假设我们将Set<Map.Entry<String, String>> allEntrys 作为函数參数传递给不可信代码。那么外部的恶意代码就能删除原始HashMap中存储的数据。所以我们应该避免传递Set<Map.Entry<String, String>>作为函数參数。防止外部代码恶意的或者不小心改动了原始的数据。
这个隐藏的功能不是全部的java程序猿都知道,所以须要注意下,以免编程出错。
相关文章
- .map() vs .forEach() vs for() 如何选择?
- com.alibaba.fastjson把JSONObject转换为Map<String, String>对象
- Java实现 LeetCode 691 贴纸拼词(DFS+map记录)
- UVA 11991 Easy Problem from Rujia Liu?(vector map)
- Java中List与Map初始化的一些写法
- [Spring学习笔记 2 ]装配各种类型的属性 map,list,array,null,properties
- [RxJS] Getting Input Text with Map
- [Immutable.js] Working with Subsets of an Immutable.js Map()
- 【学亮IT手记】SpringMVC增删改查+map数据返回Controller层代码示例
- RxJs map operator 工作原理分析
- Map集合之TreeMap
- ML之ME:分类预测问题中评价指标(AP/mAP)的简介、使用方法、代码实现、案例应用之详细攻略
- ML:分类预测任务中模型评估指标(ER/混淆矩阵ACC、Precision、Recall、AP、mAP、F1、ROC-AUC)简介、使用方法、代码实现、案例应用之详细攻略
- ML之ME:分类预测问题中评价指标(AP/mAP)的简介、使用方法、代码实现、案例应用之详细攻略
- Python 最频繁使用的4个函数:lambda、 map、filter 和 reduce
- java各map中存放null值
- es6 语法 (map、set和obj 的对比)
- js 动态设置键值对数组 ,类似于 java 的Map 类型
- 【Groovy】map 集合 ( map 集合操作符重载 | 使用 << 操作符添加一个元素 | 代码示例 )
- 【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
- 一脸懵逼学习MapReduce的原理和编程(Map局部处理,Reduce汇总)和MapReduce几种运行方式
- 004-多线程-集合-Map-jdk6/7/8中ConcurrentHashMap、HashMap分析
- 【STL】map容器