欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > JavaSE——集合16:不可变集合

JavaSE——集合16:不可变集合

2024/10/23 18:07:19 来源:https://blog.csdn.net/Helen_1997_1997/article/details/136636915  浏览:    关键词:JavaSE——集合16:不可变集合

目录

一、不可变集合基本介绍

二、创建不可变的List集合

三、创建不可变的Set集合

四、创建不可变的Map集合

(一)最多10个键值对 

(二) 键值对的数量超过10个

五、总结


一、不可变集合基本介绍

不可变集合:不可以被修改的集合。包括长度、内容等。

应用场景:1.如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。

                  2.当集合对象被不可信的库调用时,不可变形式是安全的。

简单理解:不想让别人修改集合中的内容。

二、创建不可变的List集合

public class ImmutableDemo1 {public static void main(String[] args) {/*创建不可变的List集合"张三", "李四", "王五", "赵六"*///一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作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("---------------------------");for (String s : list) {System.out.println(s);}System.out.println("---------------------------");Iterator<String> it = list.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("---------------------------");for (int i = 0; i < list.size(); i++) {String s = list.get(i);System.out.println(s);}System.out.println("---------------------------");// list.remove("李四");// list.add("aaa");// list.set(0,"aaa");}
}

三、创建不可变的Set集合

当我们要获取一个不可变的Set集合时,里面的参数一定要保证唯一性。

public class ImmutableDemo2 {public static void main(String[] args) {/*创建不可变的Set集合"张三", "李四", "王五", "赵六"               */// 一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作Set<String> set = Set.of("张三", "张三", "李四", "王五", "赵六");for (String s : set) {System.out.println(s);}System.out.println("-----------------------");Iterator<String> it = set.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("-----------------------");//set.remove("王五");}
}

四、创建不可变的Map集合

  1. 键是不能重复的
  2. Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对
  3. 如果我们要传递多个键值对对象,数量大于10个,在Map接口中还有一个方法

(一)最多10个键值对 

public class ImmutableDemo3 {public static void main(String[] args) {// 一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作Map<String, String> map = Map.of("张三", "南京", "李四", "北京","王五", "上海", "赵六", "广州", "孙七", "深圳","周八", "杭州", "吴九", "宁波", "郑十", "苏州","刘一", "无锡", "陈二", "嘉兴");Set<String> keys = map.keySet();for (String key : keys) {String value = map.get(key);System.out.println(key + "=" + value);}System.out.println("--------------------------");Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}System.out.println("--------------------------");}
}

(二) 键值对的数量超过10个

public class ImmutableDemo4 {public static void main(String[] args) {// 1.创建一个普通的Map集合HashMap<String, String> hm = new HashMap<>();hm.put("张三", "南京");hm.put("李四", "北京");hm.put("王五", "上海");hm.put("赵六", "北京");hm.put("孙七", "深圳");hm.put("周八", "杭州");hm.put("吴九", "宁波");hm.put("郑十", "苏州");hm.put("刘一", "无锡");hm.put("陈二", "嘉兴");hm.put("aaa", "111");// 2.利用上面的数据来获取一个不可变的集合/*//获取到所有的键值对对象(Entry对象)Set<Map.Entry<String, String>> entries = hm.entrySet();//把entries变成一个数组Map.Entry[] arr1 = new Map.Entry[0];//toArray方法在底层会比较集合的长度跟数组的长度两者的大小//如果集合的长度 > 数组的长度 :数据在数组中放不下,此时会根据实际数据的个数,重新创建数组//如果集合的长度 <= 数组的长度:数据在数组中放的下,此时不会创建新的数组,而是直接用Map.Entry[] arr2 = entries.toArray(arr1);//不可变的map集合Map map = Map.ofEntries(arr2);map.put("bbb","222");*/// Map<Object, Object> map = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));// JDK10之后的特性Map<String, String> map = Map.copyOf(hm);// map.put("bbb","222");}
}

五、总结

  1. 不可变集合的特点:定义完成后不可以修改、添加、删除
  2. 创建不可变集合的方法:List、Set、Map接口中,都存在of方法可以创建不可变集合
  3. 三种方式的细节:
  • List:直接用
  • Set:元素不能重复
  • Map:元素不能重复,键值对数量最多是10个;JDK10以后,超过10个用copyOf方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com