V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
singularity9866
V2EX  ›  Java

和各位 V 友们一起讨论一下 Java 基础,有谁知道输出多少?为什么吗?

  •  1
     
  •   singularity9866 · 2023-12-05 10:16:47 +08:00 · 2521 次点击
    这是一个创建于 377 天前的主题,其中的信息可能已经有所发展或是发生改变。

    /**

    • @Author : @Singularity

    • @create @2023/9/27 17:29 */ public class Test {

      public static void main(String[] args) { List<String> list = List.of("1", "2", "3"); list.add("4"); System.out.println(list); //输出多少? List<String> collect = Stream.of("1", "2", "3").collect(Collectors.toList()); list.add("4"); System.out.println(collect); //输出多少? List<String> stringList = Arrays.asList("1", "2", "3"); stringList.add("4"); System.out.println(stringList); //输出多少? } }

    11 条回复    2023-12-06 10:58:36 +08:00
    Enzoliu
        1
    Enzoliu  
       2023-12-05 10:58:43 +08:00   ❤️ 3
    这代码看的头疼,就不能格式化一下发出来吗?
    qczone
        2
    qczone  
       2023-12-05 11:00:12 +08:00
    1. 异常,因为 List.of 创建的是一个不可变的列表,不能删除增加和修改元素。
    2. 应该是 collect.add("4")吧? 输出:[1, 2, 3, 4]
    3. 异常,Arrays.asList 创建的是一个可变列表,大小是固定的,可以更改列表中的元素,但不能添加或删除。
    YoungAD
        3
    YoungAD  
       2023-12-05 11:02:28 +08:00
    @qczone Arrays.asList 不能 add 但是可以 set 好像
    qczone
        4
    qczone  
       2023-12-05 11:05:13 +08:00
    @YoungAD 是的老哥
    wjx22
        5
    wjx22  
       2023-12-05 11:09:09 +08:00
    ```
    public static void main(String[] args) {
    List<String> list = List.of("1", "2", "3");
    // list.add("4"); 报错
    System.out.println(list); //输出多少?
    List<String> collect = Stream.of("1", "2", "3").collect(Collectors.toList());
    collect.add("4");// 正常
    System.out.println(collect); //输出多少?
    List<String> stringList = Arrays.asList("1", "2", "3");
    // stringList.add("4"); 报错
    System.out.println(stringList); //输出多少?
    }
    ```
    yazinnnn0
        6
    yazinnnn0  
       2023-12-05 11:12:07 +08:00
    有点过于八股了
    Leviathann
        7
    Leviathann  
       2023-12-05 11:14:42 +08:00
    add 是陋习
    java 在朝着 fp 语言演进,比如 record 、List.of 统统都是 immutable ,pattern matching 也只适用于 immutable 的东西
    991547436
        8
    991547436  
       2023-12-05 14:43:37 +08:00
    // 使用 List.of 创建不可变列表
    List<String> list = List.of("1", "2", "3");

    // 尝试添加元素会导致 UnsupportedOperationException
    // list.add("4");

    System.out.println(list);

    // 使用 ArrayList 创建可变列表
    List<String> mutableList = new ArrayList<>(Arrays.asList("1", "2", "3"));
    mutableList.add("4");
    System.out.println(mutableList);

    // 使用 Stream 创建不可变列表,然后转为可变列表
    List<String> collect = Stream.of("1", "2", "3").collect(Collectors.toList());
    collect.add("4"); // 这是可行的,因为是可变列表
    System.out.println(collect);

    // 使用 Arrays.asList 创建的列表是固定大小的,不支持添加或删除元素
    List<String> stringList = new ArrayList<>(Arrays.asList("1", "2", "3"));
    stringList.add("4");
    System.out.println(stringList);
    yajuusenpai
        9
    yajuusenpai  
       2023-12-05 18:27:09 +08:00
    不可变列表是干啥的?
    oneisall8955
        10
    oneisall8955  
       2023-12-05 19:01:06 +08:00 via Android
    看看源码,最后返回的 List 接口实现类是哪个就行了,很基础的东西
    yolee599
        11
    yolee599  
       2023-12-06 10:58:36 +08:00
    @yajuusenpai #9 就是用来 return 一个只读列表用来遍历的,不允许通过这个列表 add
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1284 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:59 · PVG 07:59 · LAX 15:59 · JFK 18:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.