EdwardElric01 发表于 2023-11-26 21:43

Java 新人求大佬们解释为啥 java.utils.Arrays要实现一个新的 ArrayList

Java 新人,最近在学习 ArrayList.

发现 java.util.Arrays.asList 返回的 java.util.Arrays.ArrayList 和常用的 java.util.ArrayList 不是同一个东西,而且感觉限制更多。为啥不直接用 ArrayList 呢?

有 Java 大佬知道为啥吗?{:1_904:}

不知道改成啥 发表于 2023-11-27 08:46

据说Arrays.asList()的设计之初是为了打印日志用的。

logo_tu 发表于 2023-11-27 08:48

java.util.Arrays.asList 返回值是List,List是java.util.ArrayList 的父类。 其实 java.util.Arrays.asList 返回值是可以是java.util.ArrayList,但是这样违背了面向对象的接口隔离原则。可以百度看看面向对象的五大原则。

199556 发表于 2023-11-27 09:20

tanzhiwei 发表于 2023-11-27 08:46
据说Arrays.asList()的设计之初是为了打印日志用的。

+1,不能修改只能查看

nicouu 发表于 2023-11-27 09:30

java.util.Arrays.asList 返回的是一个固定长度的列表,不能进行增删操作,而常用的java.util.ArrayList是一个可变长度的列表,可以进行增删操作。

java.util.Arrays.asList 返回的列表是一个视图,对原数组的改动会反映在返回的列表中,而常用的java.util.ArrayList是一个独立的列表,对原数组的改动不会反映在ArrayList中。

所以,如果需要一个固定长度的列表,并且不需要进行增删操作,可以使用java.util.Arrays.asList返回的列表。如果需要一个可变长度的列表,并且需要进行增删操作,应该使用java.util.ArrayList。

赵迎旭 发表于 2023-11-27 09:40

数组长度是不可变的,然后你用数组生成List又是可编辑的,你觉得合理吗?从另一个角度来说,操作数组的方法十分有限,那么现在想操作数组有两种方案:1.扩展数组功能,2:开发新的结构,很显然,选择第2种,那么怎么开发新的结构呢?新结构的学习成本怎么样呢?不如用List,这样几乎没有学习成本

lushown 发表于 2023-11-27 11:05

返回值是list,那应该就是为了不止可以用arraylist接收还有linkedlist或者其他啥的来接收。

EdwardElric01 发表于 2023-11-29 00:18

赵迎旭 发表于 2023-11-27 09:40
数组长度是不可变的,然后你用数组生成List又是可编辑的,你觉得合理吗?从另一个角度来说,操作数组的方法 ...

哈哈哈哈哈,小白表示非常赞同。

感觉专门搞个新的结构除了增加一个踩坑机会外好像没解决啥本质的问题 {:1_923:},不理解作者费了半天劲实现个新的意义。这个类甚至都不是 public 的。

EdwardElric01 发表于 2023-11-29 00:20

tanzhiwei 发表于 2023-11-27 08:46
据说Arrays.asList()的设计之初是为了打印日志用的。

那为啥不用直接用 array。是为了实现 list 接口 方面之后替换别的吗?

EdwardElric01 发表于 2023-11-29 00:25

logo_tu 发表于 2023-11-27 08:48
java.util.Arrays.asList 返回值是List,List是java.util.ArrayList 的父类。 其实 java.util.Arrays.asLis ...

嗯嗯嗯,我没表述清楚,是返回 List。我想请教的是为啥要费半天劲实现个 java.utils.Arrays.ArrayList 作为 java.utils.Arrays.asList 的 返回值。而且 java.utils.Arrays.ArrayList 是 private,所以大概只有用在 java.utils.Arrays 里面了,也不通用,还不如直接用 java.utils.ArrayList 。

不理解实现个不通用的 java.utils.Arrays.asList 的意义
页: [1] 2
查看完整版本: Java 新人求大佬们解释为啥 java.utils.Arrays要实现一个新的 ArrayList