本文介绍: 【代码】Java进阶之旅第五天。
Java进阶之旅第五天
不可变集合
应用场景
- 1.如果某个数据不能被修改,把它拷贝到不可变集合中是个很好的实践
- 2.当集合对象被不可信的库调用时,不可变形式是安全的
- 3.不可变集合不能修改,只能进行查询
获取方式
- 在List,Set,Map接口中,都存在静态的of方法,可以获取一个不可变的集合
- 方法:
List.of(),Set.of(),Map.of()
- 举例代码:
List<String> list = List.of("1","2");
细节
- 1.当我们要获取一个不可变的Set集合时,里面的参数一定要保证唯一性.(集合的元素具有唯一性)
- 2.Map集合中键也不能重复
- 3.
Map.of()
方法最多只能传递10对键值对,它的底层没有可变参数的方法(原因: 一个方法中不能存在多个可变参数) - 4.当我们想要传递多个键值对进入不可变Map集合中时,我们可以使用
Map.ofEntries(Entry<? extends K, ? extends V>... entries)
,它的底层就是将一个键值对看成整体,然后改成可变参数 - 5.由于
Map.ofEntries()
方法使用不方便,所以一般常用Map.copyOf()
方法的参数是一个Map集合,返回值就是不可变集合
代码演示
//不可变集合
System.out.println("---list.of---");
List<String> list = List.of("1","2","3");
for (String s : list) {
System.out.println(s);
}
System.out.println("---set.of---");
Set<String> set = Set.of("1","2","3");
for (String s : set) {
System.out.println(s);
}
System.out.println("---Map.of(键值对有限)---");
Map<String, String> map = Map.of("小明","13","小红","15");
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey()+" = "+entry.getValue());
}
System.out.println("---Map.of(键值对个数会变化)---");
HashMap<String, String> hm = new HashMap<>();
hm.put("小明","13");
hm.put("小红","15");
hm.put("小黑","15");
//最简单的方法Map.copyOf()
System.out.println("---简单---");
Map<String, String> map1 = Map.copyOf(hm);
Set<Map.Entry<String, String>> entries1 = map1.entrySet();
for (Map.Entry<String, String> entry : entries1) {
System.out.println(entry.getKey()+" = "+entry.getValue());
}
//复杂一点的(copyOf()封装的内容(不理解可以尝试看看别的文章
System.out.println("---复杂---");
Map<String, String> entries2 = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));
Set<Map.Entry<String, String>> entries3 = entries2.entrySet();
for (Map.Entry<String, String> entry : entries3) {
System.out.println(entry.getKey()+" = "+entry.getValue());
}
结果
---list.of---
1
2
3
---set.of---
1
2
3
---Map.of(键值对有限)---
小明 = 13
小红 = 15
---Map.of(键值对个数会变化)---
---简单---
小红 = 15
小黑 = 15
小明 = 13
---复杂---
小红 = 15
小黑 = 15
小明 = 13
原文地址:https://blog.csdn.net/JUIU9527/article/details/135722278
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_61927.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。