我正在研究数组和数组列表的区别。任何人都可以澄清是否可以在不替换现有值的情况下将元素添加到数组的中间(例如x.add()对arraylist的要求)吗?
例如:如果我有一系列水果[苹果,梨,桃,油桃],而我想插入李子[苹果,梨,李子,桃,油桃]。这有可能吗,将如何实现?
最佳答案
array
的大小是固定的,因此通常很难将元素添加到数组中。
但是在特殊情况下,有可能:
仅当阵列尚未完全填充时才有可能。
像[apples, pears, peaches, nectarines, NULL, NULL]
如果必须在另一个位置记录的当前大小小于数组大小,则可以插入。
然后使用System.arraycopy()
进行插入,首先将所有在插入位置及上方的元素移到右侧的一个位置。然后添加新元素。
结果将是[apples, pears, plums, peaches, nectarines, NULL]
留下一个元素。
Java的ArrayList
使用此技术来提供动态增长的数组。
在大多数情况下,最好使用ArrayList
来完成此任务。在特殊情况下,您必须读取数百万个元素,这样一个自我管理的“增长中”数组会提高内存效率(例如,内存减少4倍,因为ArrayList
始终使用对象,而数组也可以使用基本类型,因此它们需要更少的内存)。
注意:
如果您读到您对问题的追求过于单纯,那么答案是“否”,因为您显示了一个完全填充的数组。添加更多元素的唯一机会是分配一个更大的新数组,并复制旧元素和新元素。但是然后您有了一个新数组。必须封装对该数组的访问权限,以使任何人都不能引用该数组,但该类负责管理从中添加和获取值的类。只需查看ArrayList的源代码即可获得一个想法。