我对 Java 比较陌生,多年来我不得不解决各种编程问题,其中需要收集的数据数量对于程序员来说真的是未知的。
当程序员无法知道需要收集的变量数量时,使用列表收集字符串或整数值是否是一个好的约定?或者有没有更好的方法来使用 Java 中的动态数组来处理这个问题?
我对 Java 比较陌生,多年来我不得不解决各种编程问题,其中需要收集的数据数量对于程序员来说真的是未知的。
当程序员无法知道需要收集的变量数量时,使用列表收集字符串或整数值是否是一个好的约定?或者有没有更好的方法来使用 Java 中的动态数组来处理这个问题?
如果有疑问,即使您知道长度,使用 List 也可能是更好的选择。
使用数组可以更好地提高性能,但您需要成为专家才能知道什么时候这是一个好主意,什么时候它只会使您的解决方案更加复杂。
顺便说一句:Java 中没有这样的东西dynamic arrays
。
你做得对。
List 是一个接口,ArrayList 是实现。如果您不太关心 OO mambo-jumbo,那么您可以通过以下方式理解它。
列表是您要处理“系统”的方式。你对其他任何事情都不太关心。
但是“系统”可以自由地以多种方式实现它!ArrayList、LinkedList、Vector 等
一旦你理解了这种分离,然后尝试收集这些实现之间的差异和细微差别。
列表(以及它们的表亲,Map 和 Set)对于几乎任何用例来说都是一个不错的选择。与数组相比,它们占用了更多内存并增加了少量开销,但提供了更丰富的 API,并且通常使用接口编写的代码比使用静态类型数组的代码具有更好的可重用性/灵活性。
java.util.Collections 可能会增加不可接受的开销的一种情况是,当您想要存储原始数据类型(例如 int、float 等)时,因为要存储此类类型,您需要使用包装器(集合类仅处理对象) . 包装可以大部分留给自动装箱,但需要注意内存开销。Apache commons(可能还有其他库)也提供直接使用原语的集合实现。
如果无法避免,您只想使用数组。
如果您唯一担心的是不知道您需要多少元素,例如列表。通过动态数组,我假设您想管理自己的数组并自己调整大小?除非您想了解它的工作原理,否则我不会浪费精力。
Java 的好处在于 List 是一个接口,根据您的需要具有不同的实现(如 ArrayList、LinkedList、Stack、Vector)。
看起来ArrayList可能适合你。
如果您提前知道元素的大小并且元素的类型相同,那么数组是最佳选择。
否则列表是最好的选择。