Map日常--Map的复制,Map不可修改UnsupportedOperationException


本次练习涉及到:

  1. 初始化一个static 的常量Map
  2. 设置Map为不可修改
  3. UnsupportedOperationException 异常
  4. Map的复制

package Collection;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;

public class CreateMap {

	private static Map<String,String> map;
	static {
//		按照存入顺序的Map
		map = new LinkedHashMap();
		map.put("key1", "value1");
		map.put("key3", "value3");
		map.put("key2", "value2");
	}
	
	public static void main(String[] args) {
		CreateMap cm = new CreateMap();
		cm.map.put("test", "test");		
		// java中提供了很多方法都可以实现对一个Map的复制,但是那些方法不见得会时时同步。
		// 简单说,就是一个Map发生的变化,而复制的那个依然保持原样。下面是一个比较高效的实现方法
		Map<String,String> copiedMap = Collections.synchronizedMap(map);		
		cm.setUnmodifiable();
		copiedMap.put("test2", "test2");//不会报错
		
		cm.map.put("test2", "test2");//报错
	}
	
	public void setUnmodifiable(){
//		进制修改,修改会抛出UnsupportedOperationException异常来禁止修改。
		this.map = Collections.unmodifiableMap(map);
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,可以使用Collections.unmodifiableMap()方法创建不可map。这个方法将一个可变的map转换成一个不可变的map,该方法返回一个包装器对象,该对象实现了Map接口,但不支持修改操作,任何修改操作都会抛出UnsupportedOperationException异常。 下面是一个示例代码: ```java import java.util.Collections; import java.util.HashMap; import java.util.Map; public class ImmutableMap { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); Map<String, Integer> immutableMap = Collections.unmodifiableMap(map); System.out.println(immutableMap.get("a")); // Output: 1 System.out.println(immutableMap.size()); // Output: 3 immutableMap.put("d", 4); // Throws UnsupportedOperationException } } ``` 在这段示例代码中,我们首先创建了一个可变的map,然后使用Collections.unmodifiableMap()方法将其转换成了一个不可变的map。最后,我们分别使用get()和size()方法获取map中的元素和长度,并尝试进行修改操作,该操作会抛出UnsupportedOperationException异常。 需要注意的是,虽然不可map本身不能被修改,但是如果其包含的元素是可变对象,那么这些可变对象仍然可以被修改。因此,在使用不可map时需要注意其元素的可变性。如果需要完全保证不可变性,可以使用Java不可变对象类,如Java 8中引入的Optional类、Java 9中引入的Immutable Collections等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值