Miz*_*izu 6 java arrays arraylist
在我看来ArrayList,几乎在每个场景中都会更容易使用,它非常通用.是否存在String[]用于存储输入数据的实例?如果出现这种情况,必然存在缺陷ArrayList,会是什么?
只有想到了我的头顶部的事情将是各种String类似的方法,substring()和split()等.
编辑:StackOverflow的新手.如果这是重新发布,我道歉.并感谢格式化.
小智 6
简短的答案是:不使用数组,请始终使用数组列表。唯一的例外是,如果您绝对需要控制使用的内存量,或者有一些只能String[]支持的特定性能约束。
但是,总的来说,数组在面向对象的语言中使用非常困难,并且几乎总是出于相同的原因:它们使得破坏封装非常容易。例如:
public class ExampleArray {
private final String[] strings;
public ExampleArray(String... strings) { this.strings = strings; }
public String[] getStrings() { return strings; }
}
Run Code Online (Sandbox Code Playgroud)
看到任何问题吗?是的,您需要这样写getStrings():
// ...
public String[] getStrings() { return Arrays.copy(strings); }
// ...
Run Code Online (Sandbox Code Playgroud)
否则,某些调用者可以保留您班级的内部数据并开始对其进行修改。防止这种情况的唯一方法是每次呼叫者希望看到它时都将其复制。与正确的方法相反:
public class ExampleList {
private final List<String> strings;
// ...
public List<String> getStrings() { return Collections.unmodifiableList(strings); }
}
Run Code Online (Sandbox Code Playgroud)
现在,您不复制数据,只是将其粘贴在不允许更改的API后面。如果使用Guava Immutable*类,那就更好了。