JDK新特性之优化快速创建只读集合及代码精析对比

一:在JDK9之前创建只读集合为如下操作

package chapter14;

import java.util.*;

public class ReadOnlyDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        //设为只读List集合
        list = Collections.unmodifiableList(list);
        System.out.println("list的只读集合:" + list);

        Set<String> set = new HashSet<>();
        set.add("E");
        set.add("F");
        set.add("G");
        //设为只读Set集合
        set = Collections.unmodifiableSet(set);
        System.out.println("set的只读集合:" + set);

        Map<String, String> map = new HashMap<>();
        map.put("k1", "v1");
        map.put("k2", "v2");
        map.put("k3", "v3");

        //设为只读Map集合
        map = Collections.unmodifiableMap(map);
        System.out.println("map的只读集合:" + map);
    }
}
/**
运行结果:
list的只读集合:[A, B, C]
set的只读集合:[E, F, G]
map的只读集合:{k1=v1, k2=v2, k3=v3}
*/

二:从Java 9开始,添加了静态方法of

  • 用于快速创建包含少量元素的不可变集合

  • 提供了一种简洁且类型安全的方式来创建只读集合,无需手动调用构造器或进行额外的转换

  • List接口中的of方法

    • List接口新增的of方法允许使用【可变参数】来创建一个包含指定元素的【不可变列表】
      package chapter14;
      
      import java.util.*;
      
      public class ReadOnlyDemo {
          public static void main(String[] args) {
              List<String> list = List.of("Apple", "Banana", "Cherry");
      
              // 由于是只读列表,以下操作将抛出UnsupportedOperationException  
              // list.add("Date"); // UnsupportedOperationException  
      
              // 读取列表中的元素  
              for (String fruit : list) {
                  System.out.println(fruit);
              }
          }
      }
      

    ``

  • Set接口中的of方法

    • 类似地,Set接口也新增了of方法,用于创建包含指定元素的【不可变集合】。
    • 由于集合不包含重复元素,所以传入of方法的元素会【自动去重】
      package chapter14;
      			
      import java.util.*;
      
      public class ReadOnlyDemo {
          public static void main(String[] args) {
              Set<String> set = Set.of("Apple", "Banana"); // "Apple"只会出现一次  
      
              // 由于是只读集合,以下操作将抛出UnsupportedOperationException  
              // set.add("Cherry"); // UnsupportedOperationException  
      
              for (String fruit : set) {
                  System.out.println(fruit);
              }
          }
      }
      
  • Map接口中的of方法

    • 对于Map接口,of方法允许传入一系列键值对来创建一个【不可变映射】。
    • 键和值必须是成对出现的,并且键必须是唯一的。
      package chapter14;
      
      import java.util.*;
      
      public class ReadOnlyDemo {
          public static void main(String[] args) {
              Map<String, Integer> map = Map.of("Apple", 1, "Banana", 2, "Cherry", 3);
              // 由于是只读映射,以下操作将抛出UnsupportedOperationException
              // map.put("Date", 4); // UnsupportedOperationException
      
              for (Map.Entry<String, Integer> entry : map.entrySet()) {
                  System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
              }
          }
      }
      
      /**
      运行结果:
      Key: Cherry, Value: 3
      Key: Apple, Value: 1
      Key: Banana, Value: 2
      */
      
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹意雅韵(马)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值