# 1 楼答案 这不仅是因为阵列需要增长,而且集合更容易处理 有时数组是好的,当你只需要迭代元素时,是只读的。然而,大多数情况下,您希望使用contains等方法 您无法创建泛型数组,因此它“可能”或“可能”不会困扰您 当有疑问时,使用集合,它会让使用你的API的人爱你:-)。如果只向他们提供数组,他们将编写的第一行代码是: Arrays.asList(thatGuyArray);
# 3 楼答案 列表接口(ArrayList是Java Collections Framework中的一个实现)比普通Java数组所提供的要丰富得多。由于收集框架在Java和第三方库中得到了相对广泛的支持,所以使用ArrayList而不是数组通常是有意义的。我只会在确实需要的情况下使用数组: 它们是我调用的其他接口所必需的 分析显示了一个瓶颈,在这种情况下,阵列访问可以比列表访问产生显著的加速 数组感觉更自然的情况,如中的原始数据缓冲区 byte[] buffer = new byte[0x400]; // allocate 1k byte buffer 如果需要,可以随时获取ArrayList的数组表示形式: Foo[] bar = fooList.toArray(new Foo[fooList.size()]) 方法返回对类的私有数组成员(字段)的引用是一种常见的失败模式。这打破了类的封装,因为外部人员可以可变地访问类的私有状态。因此,您需要始终克隆阵列并返回对克隆阵列的引用。使用ArrayList,您可以使用 return Collections.unmodifiableList(privateListMember); 。。。以返回保护实际列表对象的包装。当然,您需要确保列表中的对象也是不可变的,但这也适用于可变对象(克隆)数组 根据Nick Holt的评论,你不应该在任何地方暴露列表是ArrayList的事实: private List<Foo> fooList = new ArrayList<Foo>(); public List<Foo> getFooList() { return Collections.unmodifiableList(fooList); }
# 1 楼答案
这不仅是因为阵列需要增长,而且集合更容易处理
有时数组是好的,当你只需要迭代元素时,是只读的。然而,大多数情况下,您希望使用contains等方法
您无法创建泛型数组,因此它“可能”或“可能”不会困扰您
当有疑问时,使用集合,它会让使用你的API的人爱你:-)。如果只向他们提供数组,他们将编写的第一行代码是:
# 2 楼答案
还有几点:
<> LI>您可能需要考虑使用数组来表示<强>多个维度<强>(例如矩阵)。<李>- 数组可用于存储原语,因此比使用ArrayList提供更紧凑的数据表示形式李>
# 3 楼答案
列表接口(ArrayList是Java Collections Framework中的一个实现)比普通Java数组所提供的要丰富得多。由于收集框架在Java和第三方库中得到了相对广泛的支持,所以使用ArrayList而不是数组通常是有意义的。我只会在确实需要的情况下使用数组:
数组感觉更自然的情况,如中的原始数据缓冲区
如果需要,可以随时获取ArrayList的数组表示形式:
方法返回对类的私有数组成员(字段)的引用是一种常见的失败模式。这打破了类的封装,因为外部人员可以可变地访问类的私有状态。因此,您需要始终克隆阵列并返回对克隆阵列的引用。使用ArrayList,您可以使用
。。。以返回保护实际列表对象的包装。当然,您需要确保列表中的对象也是不可变的,但这也适用于可变对象(克隆)数组
根据Nick Holt的评论,你不应该在任何地方暴露列表是ArrayList的事实: