有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    这不仅是因为阵列需要增长,而且集合更容易处理

    有时数组是好的,当你只需要迭代元素时,是只读的。然而,大多数情况下,您希望使用contains等方法

    您无法创建泛型数组,因此它“可能”或“可能”不会困扰您

    当有疑问时,使用集合,它会让使用你的API的人爱你:-)。如果只向他们提供数组,他们将编写的第一行代码是:

    Arrays.asList(thatGuyArray);
    
  2. # 2 楼答案

    还有几点:

      <> LI>您可能需要考虑使用数组来表示<强>多个维度<强>(例如矩阵)。<李>
    • 数组可用于存储原语,因此比使用ArrayList提供更紧凑的数据表示形式
  3. # 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);
    }