如何初始化具有特定大小的ArrayList并直接访问其元素

时间:2018-01-05 05:05:10

标签: java list arraylist

我正在写一些需要大小为n的arrayList的东西,所以我做了以下几点:

List<Set<Integer>> list = new ArrayList<Set<Integer>(n);

当我试图访问列表中的元素时,例如

list.get(someValue that is <n)

我得到了arrayList超出绑定的异常,所以我想把n放在那里并没有真正帮助你初始化列表,只是预先分配空间。

有没有办法进行初始化,之后每个插槽中实际上有空或对象?

我最终使用for循环并添加n个空集然后索引到列表中。

如果提前知道尺寸,是否有更好的方法来初始化阵列?

在说这是重复之前,请知道我在问什么。

希望我的问题很明确。

提前致谢。

有些人认为我试图做的事情毫无意义。当我尝试解决与我尝试在阵列中访问的集合的索引相关的存储桶排序相关问题时会发生这种情况。因此,例如,我想在位置1,3,2,4 ...处添加一些元素然后如果我可以将位置设置在位置1,3,2,4 ......那么将会很方便。 / p>

3 个答案:

答案 0 :(得分:1)

如果您查看Java API文档,您将看到为ArrayList提供了3个构造函数:

的ArrayList()

ArrayList(Collection c) - 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

ArrayList(int initialCapacity) - 构造一个具有指定初始容量的空列表。

如果您需要在其定义位置填充ArrayList的插槽,则可以使用列出的第二个构造函数。您需要知道需要传递Collection,因此您可以执行类似的操作,例如:

ArrayList<Integer> al = new ArrayList<>(Arrays.asList(1,2,3,4,5);

现在size()的al是5,它填充了数字1,2,3,4和5。

此外,您需要注意ArrayList不能像Arrays一样工作且尺寸不固定 - 它会因添加或删除项目而发生变化。 < / p>

答案 1 :(得分:0)

如果您查看 ArrayList.html#ArrayList(int) 的文档,则会明确提及

  

构造一个具有指定初始容量的空列表。

是的,它为给定的初始容量分配内存,但这是为了方便,并有助于避免在你的arraylist增长时进一步重新分配内存。如果您确定,您的列表将至少包含一些元素,那么最好指定初始容量。

因此,当您尝试访问ArrayList的任何元素时,它会检查最后一个元素索引(即size)。 当新元素添加到size

时,List的值会增加
if (index >= size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

答案 2 :(得分:0)

我可以自由地重复bcsb1001的解决方案,这可能被各种评论所掩盖。为了使用有效的占位符值初始化固定大小的数组:

new ArrayList (Collections.nCopies (n, null));

这个主意是我在各种搜索中都能找到的最好的主意,也许对其他人也有用。