gpt4 book ai didi

java - 输入存储在 Arraylist 或 String 数组中? (新程序员)Java

转载 作者:搜寻专家 更新时间:2023-10-31 08:15:23 25 4
gpt4 key购买 nike

在我看来,ArrayList 几乎在所有情况下都更易于使用,它非常通用。是否存在使用 String[] 存储输入数据的实例?如果真有这种情况,那么ArrayList一定有缺点,那会是什么呢?

我脑海中唯一浮现的就是各种 String 方法,例如 substring()split()

编辑:也是 StackOverflow 的新手。如果这是重新发布,我深表歉意。并感谢您的格式化。

最佳答案

简短的回答是:不要使用数组,总是使用数组列表。唯一的异常(exception)是,如果您绝对需要控制使用的内存量,或者您有一些只有 String[] 可以支持的特定性能限制。

不过,一般来说,数组在面向对象的语言中使用起来很糟糕,而且几乎总是出于相同的原因:它们很容易破坏封装。例如:

public class ExampleArray {
private final String[] strings;

public ExampleArray(String... strings) { this.strings = strings; }
public String[] getStrings() { return strings; }
}

有什么问题吗?是的,您需要像这样编写 getStrings():

// ...
public String[] getStrings() { return Arrays.copy(strings); }
// ...

否则,某些调用者可以获取您的类的内部数据并开始修改它。防止这种情况的唯一方法是每次调用者想要查看它时都复制它。与正确的方式相反:

public class ExampleList {
private final List<String> strings;

// ...

public List<String> getStrings() { return Collections.unmodifiableList(strings); }
}

现在您不是在复制数据,而是将其粘贴在不允许更改的 API 后面。如果您使用 Guava Immutable* 类,那就更好了。

关于java - 输入存储在 Arraylist 或 String 数组中? (新程序员)Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13874420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com