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));
			}
			}

猜你喜欢

转载自blog.csdn.net/zhang19903848257/article/details/106022478
今日推荐