HaspMap使用,报错,乱序问题

HaspMap的简单使用

HashMap的简单增删改
package map集合;

import java.util.HashMap;
import java.util.Map;

public class MapTest {
	 	public static void main(String[] args) {
			Map map = new HashMap();
			//成对放入多对 key-value
			map.put("java",109);
			map.put("ios",10);
			map.put("js",79);
			//value值可以重复
			map.put("python",99);
			//放入重复的key时,输出的是被覆盖的key的value值
			System.out.println(map.put("js", 29));
			//输入集合中的所有键值对
			System.out.println(map);
			
			//判断是否包含某个key
			System.out.println(map.containsKey("js"));//true
			//判断是否包含某个值
			System.out.println(map.containsValue(10));//true
			
			//获取Map集合的所有key组成的集合,通过遍历key来实现所有的键值对
			for(Object key:map.keySet()) {
				System.out.println(key+"---"+map.get(key));
			}
			//删除某个键值对
			map.remove("js");
			System.out.println(map);
		}
		//当两个hashMap的键值相同时,比较他们的值
		Map<Object,Object> mapOne= new HashMap<Object,Object>(); 
			Map<Object,Object> mapTwo= new HashMap<Object,Object>(); 
			mapOne.put(1, 1);
			mapOne.put(2, 2);
			mapTwo.put(3, 3);
			mapTwo.put(4, 4);
			
			for(Object key:mapOne.keySet()) {
				System.out.println(mapOne.get(key)==mapTwo.get(key));
			}

}

HashMap存储容器

 HashMap<String,Vector<Object>> nowMessage =new HashMap<String,Vector<Object>>()
HashMap遍历时删除元素报错问题
Map<String,Object> searchMap = new HashMap<String,Object>();
            searchMap.put("name", name);
			searchMap.put("gender",gender);
			searchMap.put("idcard",idcard);
			searchMap.put("profession",profession);
for(Object key:searchMap.keySet()) {			if(searchMap.get(key).equals("")||searchMap.get(key).equals("请选择")) {
           //删除对应的键值对
				searchMap.remove(key,searchMap.get(key));
			}
			}

结果:
报错:
java.util.ConcurrentModificationException HashMap
报错原因:
HashMap不是线程安全的,ConcurrentHashMap是线程安全的。
解决措施
方法1:简单粗暴:将HashMap改成ConcurrentHashMap

Map<String,Object> searchMap = new ConcurrentHashMap<String,Object>();
			searchMap.put("name", name);
			searchMap.put("gender",gender);
			searchMap.put("idcard",idcard);
			searchMap.put("profession",profession);
			for(Object key:searchMap.keySet()) {
	         if(searchMap.get(key).equals("")||searchMap.get(key).equals("请选择")) {
				searchMap.remove(key,searchMap.get(key));
			}

方法2:在修改HashMap的上下文进行加锁操作(不是很理解)

HashMap元素排序乱序问题

HashMap储存元素时是乱序的,而LinkedHashMap是按照顺序的。如果需要按照顺序时,可以将HashMap改为LinkedHashMap。

HashMap元素排序乱序和HashMap遍历时删除元素报错问题同时解决。

问题:
假如我要删除某个集合中的一些键值对,并且这个集合的顺序不能改变。但是LinkedHashMap删除时有安全问题,而ConcurrentHashMap又是乱序的。
解决方法:
采用不删除,而采用添加的操作。
新建一个集合,遍历之前的集合。遍历时添加选择条件,将符合条件的元素添加到新的集合中。

			String name = this.nameSearch.getText();
			String gender = this.genderSearch.getSelectedItem().toString();
			String idcard= this.idcardSearch.getSelectedItem().toString();
			String profession = this.professionSearch.getSelectedItem().toString();
            //所有搜索内容的集合   此处用两个linkedMap的原因    因为用for循环删除不需要的内容时会爆安全问题,需要用ConcurrentHashMap,但是他是不排序的,所以只能用两个linkedHashMap
			Map<String,Object> searchMap = new LinkedHashMap<String,Object>();
			searchMap.put("name", name);
			searchMap.put("gender",gender);
			searchMap.put("profession",profession);
			searchMap.put("idcard",idcard);
			//可用于挑选的内容集合
			Map<String,Object> searchMaps = new LinkedHashMap<String,Object>();
			
			for(Object key:searchMap.keySet()) {
			if(searchMap.get(key).equals("")==false||searchMap.get(key).equals("请选择")==false) {
				searchMaps.put((String) key,searchMap.get(key));
			}
			}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

See you !

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值