当前位置:   article > 正文

Java可变参数和不可变集合_java list 可变参数

java list 可变参数

目录

一、可变参数

二、不可变集合(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 <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集合对象
 


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

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);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/156020
推荐阅读
相关标签
  

闽ICP备14008679号