当前位置: 首页 > article >正文

Java不可变集合

Java不可变集合

不可变集合:也就是不可以被修改的集合

  • 创建不可变集合的应用场景

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

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

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

  • 创建不可变集合的书写格式

在List、Set、Map接口中,都存在静态的of方法,可以获取一个不可变的集合。

方法名称

说明

static <E>List<E>of(E…elements)

创建一个具有指定元素的List集合对象

static <E>Set<E>of(E…elements)

创建一个具有指定元素的Set集合对象

static<K,V>Map<K,V>of(E…elements)

创建一个具有指定元素的Map集合对象

注意:这个集合不能添加,不能删除,不能修改。

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方法可以创建不可变集合

3.三种方式的细节

● List:直接用

● Set:元素不能重复

● Map:元素不能重复、键值对数量最多是10个。超过10个用ofEntries方法,JDK10以后用copyOf更加简单


http://www.kler.cn/a/160019.html

相关文章:

  • zabbix监控端界面时间与服务器时间不对应
  • DApp开发:定制化解决方案与源码部署的一站式指南
  • Unity3D
  • PostgreSQL中的COPY命令:高效数据导入与导出
  • Springboot整合Prometheus+grafana实现系统监控
  • 从0开始学PHP面向对象内容之(常用魔术方法续一)
  • 你敢信!贪吃蛇游戏居然能插入到富文本编辑器里!
  • 查看mysql 或SQL server 的连接数,mysql超时、最大连接数配置
  • 2023亚太地区五岳杯量子计算挑战赛
  • 智能优化算法应用:基于饥饿游戏算法无线传感器网络(WSN)覆盖优化 - 附代码
  • JavaScript中使用JSON的基本操作示例
  • 【C#学习笔记】委托与事件 (从观察者模式看C#的委托与事件)
  • 音视频的功耗优化
  • 7Docker搭建es和kibana
  • 对String类的深入理解
  • 【人体解剖学与组织胚胎学】练习三 高度相联知识点整理及对应习题
  • Linux环境变量与命令行参数
  • Java第二十一章网络通信
  • InST论文复现
  • 本地缓存LoadingCache使用【详解】
  • Hadoop入门学习笔记
  • Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问
  • JavaScript中处理时间差
  • torch 如何实现两点分布采样,100个样本中20个样本为1,80个为2
  • Docker-多容器应用
  • 算法题:买汽水(瓶子瓶盖换水)