论坛首页 Java企业应用论坛

《Thinking in Java》中Arrays.asList的解释错误

浏览 11571 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-25   最后修改:2011-01-25
别想了,看看api就知道了
public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定大小的列表。
既然是固定大小了,自然不能add,那么也自然不能用java.util.ArrayList类的实例.
看看这个静态ArrayList就知道了,它是一个不可变对象,既高效又安全.
0 请登录后投票
   发表时间:2011-01-25  
akunamotata 写道
AllenZhang 写道
asList返回的是内部的ArrayList.其和java.util.ArrayList不同。最大的区别就是没有add方法,只能扔exception.
内部ArrayList类,性能并不是最大考虑的,而是在设计的意义上,数组应该是固定大小的。



我赞同,如果光是读的话,性能是一样的。



我也同意这个观点
0 请登录后投票
   发表时间:2011-01-25  
aoliwen521 写道
Turbo 写道
yangyi 写道
没有做Array Copy动作,应该是基于性能的考量

我觉得不是基于性能的考量,留意它的名字,Arrays as List,就是array的本质没有变,只是以List的形式出现,方便使用而已.

同意,觉得这个才是正解。
底层仍然是一个数组,保持数组能拥有的所有操作。
比如修改某一个元素,或者遍历。
但是不能够改变长度。
只是以List形态出现,为了某些仅对List读操作的方法可以顺利的执行。

0 请登录后投票
   发表时间:2011-01-25   最后修改:2011-01-25
落依然 写道
aoliwen521 写道
Turbo 写道
yangyi 写道
没有做Array Copy动作,应该是基于性能的考量

我觉得不是基于性能的考量,留意它的名字,Arrays as List,就是array的本质没有变,只是以List的形式出现,方便使用而已.

同意,觉得这个才是正解。
底层仍然是一个数组,保持数组能拥有的所有操作。
比如修改某一个元素,或者遍历。
但是不能够改变长度。
只是以List形态出现,为了某些仅对List读操作的方法可以顺利的执行。



为什么要转为List?接口适配
怎么转List?简单高效,不能进行Array Copy
所以:
第一,1是根本目的,没人否认
第二,2是实现方法,快在构造上,不在使用上
第三,本人之前讨论的是为什么没有返回java.util.ArrayList而重新设计了一个List,其他一切讨论都与此无关,典型的无关说法有:
a) 读的速度快,写也差不多 —— 俺说的是构造是没有Array Copy是基于性能考虑
b)名字叫asList,所以返回一个List,底层仍然是数组 ——参考第一点
引用
我觉得不是基于性能的考量

这句话要有上下文才能理解,就是什么不是基于性能的考量,asList这个方法的存在本身当然不是基于性能的考量,那是基于需求的考量
0 请登录后投票
   发表时间:2011-01-26  
次“ArrayList”非彼“ArrayList”,一句话足够了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics