精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-24
asList返回的是内部的ArrayList.其和java.util.ArrayList不同。最大的区别就是没有add方法,只能扔exception.
内部ArrayList类,性能并不是最大考虑的,而是在设计的意义上,数组应该是固定大小的。 |
|
返回顶楼 | |
发表时间:2011-01-24
akunamotata 写道 其实觉得可以直接使用java.util.ArrayList,为什么要实现一个静态内部类?也是出于性能的考虑?
保证这个List永远是这个Array的实时数据,并且,这个List永远是只读的 |
|
返回顶楼 | |
发表时间:2011-01-24
最后修改:2011-01-24
Java Collection Framework中只保证了基本实现中会实现接口中的所有方法,其他实现类中不必全部实现,如果不实现的话,要抛出异常;
对于List接口基本实现就是util包中的ArrayList和LinkedList了; Arrays.asList返回一个静态数组的原因,我同意yangyi的,是为了性能; 如果要resize的话,再用util包里的ArrayList来包装下OK了; |
|
返回顶楼 | |
发表时间:2011-01-24
HelloJimmy 写道 Java Collection Framework中只保证了基本实现中会实现接口中的所有方法,其他实现类中不必全部实现,如果不实现的话,要抛出异常;
对于List接口基本实现就是util包中的ArrayList和LinkedList了; Arrays.asList返回一个静态数组的原因,我同意yangyi的,是为了性能; 如果要resize的话,再用util包里的ArrayList来包装下OK了; 如果是Fixed size,java.util.ArrayList(注意构造参数)和Arrays.asList的读速度不是一样吗? 那里提高的性能? |
|
返回顶楼 | |
发表时间:2011-01-24
AllenZhang 写道 asList返回的是内部的ArrayList.其和java.util.ArrayList不同。最大的区别就是没有add方法,只能扔exception.
内部ArrayList类,性能并不是最大考虑的,而是在设计的意义上,数组应该是固定大小的。 我赞同,如果光是读的话,性能是一样的。 |
|
返回顶楼 | |
发表时间:2011-01-25
这点恰好昨天我也看了,我要学习楼主这种精神
|
|
返回顶楼 | |
发表时间:2011-01-25
书中说的没错呀,底层确实是一个数组
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } |
|
返回顶楼 | |
发表时间:2011-01-25
最后修改:2011-01-25
skyuck 写道 书中说的没错呀,底层确实是一个数组
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } 数组是没错,但是java.util.ArrayList提供了add方法来改变这个数组的大小,你可以看下它的源码。 这个静态内部类不是不可以实现这个add方法,而是在设计的意义上,数组应该是固定大小的。 |
|
返回顶楼 | |
发表时间:2011-01-25
yangyi 写道 没有做Array Copy动作,应该是基于性能的考量
我觉得不是基于性能的考量,留意它的名字,Arrays as List,就是array的本质没有变,只是以List的形式出现,方便使用而已. |
|
返回顶楼 | |
发表时间:2011-01-25
Turbo 写道 yangyi 写道 没有做Array Copy动作,应该是基于性能的考量
我觉得不是基于性能的考量,留意它的名字,Arrays as List,就是array的本质没有变,只是以List的形式出现,方便使用而已. 同意,觉得这个才是正解。 底层仍然是一个数组,保持数组能拥有的所有操作。 比如修改某一个元素,或者遍历。 但是不能够改变长度。 只是以List形态出现,为了某些仅对List读操作的方法可以顺利的执行。 |
|
返回顶楼 | |