本文介绍: Map.of方法使用起来有点麻烦,在JDK10以后,Map中引入新方法Map.copyOf()在List、Set、Map接口中,都存在静态的of方法,可以获取一个不可变的集合。●如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。●List、Set、Map接口中,都存在of方法可以创建不可变集合。●当集合对象被不可信的库调用时,不可变形式是安全的。注意:这个集合不能添加,不能删除,不能修改。不可变集合:也就是不可以被修改的集合。创建一个具有指定元素的Map集合对象。● List:直接用。
Java不可变集合
●如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。
在List、Set、Map接口中,都存在静态的of方法,可以获取一个不可变的集合。
方法名称 |
|
Map.of方法使用起来有点麻烦,在JDK10以后,Map中引入新方法Map.copyOf()
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ImmutableSetDemo {
public static void main(String[] args) {
List<String> list = List.of("张三", "李四", "王五", "赵六", "钱七");
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(3));
System.out.println(list.get(4));
// 以下方法不受支持,不可变集合不支持增删改
/*
list.add("杨八");
list.remove("张三");
list.set(1, "李雷");
*/
// Set集合
// 以下创建Set的代码不支持,
// 注意要获取一个不可变的Set集合时
// 里面的参数一定要保证唯一性
// Set<String> set = Set.of("aaa", "aaa", "bbb", "ccc", "ddd");
Set<String> set = Set.of("aaa", "bbb", "ccc", "ddd");
// 创建Map的不可变集合
// 注意点:
// 1.键时不能重复的
// 2.Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对
// 3.如果要传递10个以上的参数,使用ofEntries()方法
Map<Object, Object> map = Map.of("江苏", "南京", "浙江", "杭州", "安徽", "合肥");
// 创建Map对象
Map<String, String> hm = new HashMap<>();
hm.put("1", "一");
hm.put("2", "二");
hm.put("3", "三");
hm.put("4", "四");
hm.put("5", "五");
/*
//获取到所有的键值对对象(Entry对象)
Set<Map.Entry<String,String>> entries = hm.entrySet();
//把entries变成一个数组
Map.Entry[] arr1 =new Map.Entry[θ];
//toArray方法在底层会比较集合的长度跟数组的长度两者的大小
//如果集合的长度>数组的长度:数据在数组中放不下,此时会根据实际数据的个数,重新创建数组//如果集合的长度<=数组的长度:数据在数组中放的下,此时不会创建新的数组,而是直接用Map.Entry[]arr2 =entries.toArray(arr1);//不可变的map集合
Map map =Map.ofEntries(arr2);
map.put("bbb","222");
*/
// 利用copyOf()方法创建不可变对象
Map<String, String> map2 = Map.copyOf(hm);
// 以下代码不受支持
map2.put("6", "六");
}
}
1.不可变集合的特点?
2.如何创建不可变集合?
●List、Set、Map接口中,都存在of方法可以创建不可变集合
● List:直接用
● Set:元素不能重复
● Map:元素不能重复、键值对数量最多是10个。超过10个用ofEntries方法,JDK10以后用copyOf更加简单
原文地址:https://blog.csdn.net/weixin_50083448/article/details/134715671
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_34480.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。