Java:存储到ArrayList的任意索引的最佳方法

pit*_*las 5 java data-structures

我知道我无法将值存储在尚未使用的ArrayList的索引上,即小于大小。换句话说,如果myArrayList.size()为5,那么如果我尝试这样做

myArrayList.set(10, "Hello World") 
Run Code Online (Sandbox Code Playgroud)

我将出现错误。但是我的应用程序需要这个。除了在每个中间插槽中存储空值的循环之外,还有其他更优雅的方法吗?

在我看来:

  • 此行为在Vector中是相同的
  • 如果我需要能够随机访问(即pos X的元素),那么我的选择是Vector和ArrayList。
  • 我可以使用HashMap并将索引用作键,但这确实效率很低。

那么,什么是看起来很普通的案例的优雅解决方案呢?我肯定错过了什么...

Ste*_*ven 5

我可以使用 HashMap 并使用索引作为键,但这确实效率很低。

依靠。如果您使用的索引非常稀疏,那么使用 Map 可能会更好。如果索引往往紧密相连,我认为没有比用空值填充更好的方法了。只需为其编写一个实用函数,您可以反复使用它,而不是在需要的地方重复循环,如下所示:

private void padTo(List<?> list, int size) {
    for (int i=list.size(); i<size; i++)
        list.add(null);
}
Run Code Online (Sandbox Code Playgroud)

  • 考虑在循环之前调用“list.ensureCapacity(size)”以避免不必要的内存重新分配。 (3认同)