我们正在了解收集界面,我想知道你们是否对它的一般用途都有任何好的建议?对于不能用数组做的Collection,你能做些什么?你怎么能用一个你不能用Collection做的数组(除了允许重复)?
Kev*_*ion 66
如果您这样想的话很容易:集合在基本上每种可以想象的方式都优于对象数组.
你应该更喜欢List<Foo>在Foo[]只要有可能.考虑:
ArrayStoreException可以在运行时产生.List<Class<? extends E>>或List<Optional<T>>).使用数组,您将收到编译警告和混乱的运行时异常.equals,hashCode和toString方法做什么用户的期望; 阵列上的那些方法可以做任何事情,除了你期望的 - 一个常见的bug来源.对象数组永远不会成为Java中的一等公民.
从第119页开始,Effective Java,Second Edition中更详细地介绍了上述一些原因.
那么,为什么你会使用对象数组呢?
List尽可能接近API这基本上是所需抽象级别的问题.
大多数集合可以用数组实现,但为方便起见,它们提供了更多的方法.例如,我所知道的大多数集合实现可以根据需求增长和缩小,或者执行基本数组无法执行的其他"高级"操作.
例如假设您正在从文件加载字符串.您不知道文件包含多少个换行符,因此您不知道在分配数组时要使用的大小.因此,ArrayList是更好的选择.
Collection 接口只是专门集合的基接口——我还不知道有一个类只是实现 Collection;相反,类实现扩展 Collection 的专用接口。这些专门的接口和抽象类提供了处理集合(唯一对象)、增长数组(例如ArrayList)、键值映射等的功能——所有这些都不能用数组直接完成。然而,迭代数组以及设置/读取数组中的项目仍然是 Java 中处理数据最快的方法之一。
| 归档时间: |
|
| 查看次数: |
19121 次 |
| 最近记录: |