• Java可变参数和不可变集合


    目录

    一、可变参数

    二、不可变集合(JDK9以上)

    1、创建不可变的list集合

    2、创建不可变的Set集合

    3、创建不可变的Map集合


    一、可变参数

    1.可变参数本质上就是一个数组

    2.作用:在形参中接收多个数据

    3.格式:数据类型...参数名称

    举例:int...a

    注意:

    1、形参列表中可变参数只能有一个

    2、可变参数必须放在形参列表的最后面

    示例:

    1. public static void main(String[] args) {
    2. //可变参数的小细节:
    3. //1.在方法的形参中最多只能写一个可变参数
    4. //可变参数,理解为一个大胖子,有多少吃多少
    5. //2.在方法的形参当中,如果出了可变参数以外,还有其他的形参,那么可变参数要写在最后
    6. int sum = getSum(1,2,3,4,5);
    7. System.out.println(sum);
    8. }
    9. //定义一个可变数组
    10. public static int getSum(int a,int...args){
    11. int sum = 0;
    12. for (int arg : args) {
    13. sum = sum + arg;
    14. }
    15. return sum;
    16. }

    二、不可变集合(JDK9以上)

    应用场景

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

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

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

    创建不可变集合的方式:

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

    方法名称说明
    static List of(E...elements)
     
    创建一个具有指定元素的List集合对象
     
    static Set of(E...elements)
     
    创建一个具有指定元素的Set集合对象
     
    static Map of(E...elements)
     
    创建一个具有指定元素的Map集合对象
     


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

    1、创建不可变的list集合

    1. List<String> list = List.of("张三","李四","王五","赵六");
    2. System.out.println(list.get(0) );
    3. System.out.println(list.get(1));
    4. System.out.println(list.get(2));
    5. System.out.println(list.get(3));
    6. for (String s : list) {
    7. System.out.println(s);
    8. }

    2、创建不可变的Set集合

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

    1. Set<String> set = Set.of("张三","张三","李四","王五i","赵六");
    2. for ( String s : set){
    3. System.out.println(s);
    4. }

    3、创建不可变的Map集合

    示例:

    1. /*
    2. 创建Map的不可变集合
    3. 细节1:
    4. 键是不能重复的
    5. 细节2:
    6. Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对
    7. */
    8. //一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作
    9. Map<String,String> map = Map.of( "张三","南京","张三","北京","王li","上:海",
    10. "赵六","广州","孙七","深圳","周八","杭州",
    11. "吴九","宁波","郑十","苏州","刘一","无锡","陈二","嘉兴");
    12. Set<String> keys = map.keySet( );
    13. for (String key : keys){
    14. String value = map.get(key);
    15. System.out.println(key + "="+ value);
    16. }
    1. //多余10个的键值对
    2. HashMap<String,String> hm = new HashMap<>();
    3. hm.put("张三","南京");
    4. hm.put("李四","北京");
    5. hm.put("王五","上海");
    6. hm.put("赵六","北京");
    7. hm.put("孙七","深圳");
    8. hm.put("周八","杭州");
    9. hm.put("吴九","宁波");
    10. hm.put("郑十","苏州");
    11. hm.put("刘一","无锡");
    12. hm.put("陈二","新兴");
    13. hm.put("aaa","111");
    14. //2.利用上面的数据来获取一个不可变的集合
    15. //获取到所有的键值对对象(Entry对象>
    16. //方式1
    17. Set<Map.Entry<String,String>> entries = hm.entrySet( );
    18. //把entries变成一个数组
    19. Map.Entry[] arr1 = new Map.Entry[0];
    20. //toArray方法在底层会比较集合的长度跟数组的长度两者的大小
    21. //如果集合的长度〉数组的长度﹔数据在数组中放不下,此时会根据实际数据的个数,重新创建数 组
    22. //如果集合的长度〈=数组的长度:数据在数组中放的下,此时不会创建新的数组,而是直接用
    23. Map.Entry[] arr2 = entries.toArray( arr1);
    24. //不可变的map集合
    25. Map map = Map.ofEntries( arr2);
    26. //方式2
    27. //Nap<object, object> map = Map.ofEntries(hm.entrySet().toArray(newMap.Entry[0]));
    28. //方式3
    29. Map<String,String> map = Map.copyof(hm);

  • 相关阅读:
    暑期微小公司软开实习周记
    【OpenHarmony】napi基本用法之promise实现
    串口通讯,三种数据传输方式介绍
    如何使用Arduino构建3D打印的电子动画眼睛
    对抗网络爬虫:反爬虫技术与策略详解
    EMC Unity存储系统如何查看SSD的使用寿命
    Fast Adaptive Similarity Search through Variance-Aware Quantization (ICDE 2022)
    贪心+二分+DP+矩阵快速幂:CF461E
    实战:Linux下静默安装DM达梦数据库
    使用 Powershell 检索不理解的命令
  • 原文地址:https://blog.csdn.net/qi341500/article/details/128039653