不可变集合
温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!
一.创建不可变集合
(图片来源网络,侵删)
不可变集合:不可以被修改的集合,一旦被创建之后,长度和内容均不可修改
创建不可变集合的应用场景:
1.如果某个数据不能够,也不应该被修改,把它存入不可变集合中
2.当集合对象被不可信的库调用时,不可变的形式是安全的
(也就是说在不想让别人修改集合中的内容时用到不可变集合)
创建不可变集合的书写格式:(要注意此时创建的都是不可变集合,其中的内容无法进行修改)
static List of(E...elements)创建一个具有指定元素的List集合对象
import java.util.Iterator;
import java.util.List;
public class ImmutableCollection {
public static void main(String[] args) {
List list = List.of("A", "B", "C", "D");
Iterator it = list.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
list.remove("A");//报错
list.add("a");//报错
list.set(0, "a");//报错
}
}
static set of(E...elements)创建一个具有指定元素的Set对象
(在创建Set对象的不可变集合时的注意事项:要保证其中元素的唯一性)
import java.util.Iterator;
import java.util.Set;
public class ImmutableCollection {
public static void main(String[] args) {
Set s = Set.of("A", "B", "C", "D");
Iterator it = s.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
s.remove("A");//报错
}
}
static Map of(E...elements)创建一个具有指定元素的Map集合对象
(在创建Map对象的不可变集合时的注意事项:
1.键是不能重复的
2.Map中的of方法可传递的参数是有上限的,最多只能传递20个参数,即10个键值对对象
3.如果我们要传递多个键值对对象,且其数量大于10个,这时可以使用Map接口中的一个方法)
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MoreMap {
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put("A", "a");
hm.put("B", "b");
hm.put("C", "c");
hm.put("D", "d");
hm.put("E", "e");
hm.put("F", "f");
hm.put("G", "g");
hm.put("H", "h");
hm.put("I", "i");
hm.put("J", "j");
hm.put("K", "k");
hm.put("L", "l");
hm.put("M", "m");
hm.put("N", "n");
//获取到所有的Entries键值对对象
Set entries = hm.entrySet();
//将所有的键值对对象存入一个数组中
Map.Entry[] arr1 = new Map.Entry[0];
/*toArray方法在底层会比较集合的长度和数组的长度两者的大小
若集合的长度大于数组的长度,数据在数组中放不下,此时会返回实际数据的个数,重新创建数组
若集合的长度小于等于数组的长度,数据能够存储在数组之中,此时不会创建新的数组,直接使用创建好的数组即可
*/
Map.Entry[] arr2 = entries.toArray(arr1);
//现在就可以创建不可变的Map集合
Map map1 = Map.ofEntries(arr2);
map1.put("a", "1");
//简化方式
Map map2 = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));
map2.put("b", "2");
//Map接口中的copyOf方法更能简化这一过程(JDK10时才加入)
Map map3 = Map.copyOf(hm);
map3.put("c", "3");
//当然三个创建的map在调用put方法时都毫不意外的会报错,因为现在创建的是不可变集合
}
}
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
