这是 "Increase" ArrayList 大小的最佳方式吗?
Is This The Best Way To "Increase" The Size of An ArrayList?
ArrayList<T> tempArray = new ArrayList<>(size);
我正在为我的合并排序构建一个 tempArray,它将根据上下文对整数或字符串进行排序。因此类型 T ArrayList.
然后我突然 运行 每当调用它时都会出现 IndexOutOfBounds 错误:
tempArray.set(index, values.get(leftFirst));
经过一些研究,我发现容量和大小并不是同一回事。因此,为了 "increase" 我刚刚添加了一个 for 循环,该循环运行 size 次,每次都添加一个空值:
for (int i = 0; i < size; i++)
tempArray.add(null);
这是最好的解决方案吗?
您正在尝试将 ArrayList 用作映射,因此只需切换到 Map 并将您的键作为整数保存:
Map<Integer, Object> map = new HashMap<>(size);
map.put(index, values.get(leftFirst));
然后通过map.get method获取索引:
map.get(index)
请注意,如果您的索引以一百万开头,您将有 ~million 空值将不会被使用。它似乎非常不必要并且错误地实现了。
编辑
来自 comments/question,使用 T
:
声明您的地图
Map<Integer, T> map = new HashMap<>(size);
在我看来,最好的方法是首先创建泛型数组,然后再使用 ArrayList 创建包装器。
1.You 可以看到如何从泛型类型创建数组 here
2.You 可以看到如何从数组创建 ArrayList here
ArrayList<T> tempArray = new ArrayList<>(size);
我正在为我的合并排序构建一个 tempArray,它将根据上下文对整数或字符串进行排序。因此类型 T ArrayList.
然后我突然 运行 每当调用它时都会出现 IndexOutOfBounds 错误:
tempArray.set(index, values.get(leftFirst));
经过一些研究,我发现容量和大小并不是同一回事。因此,为了 "increase" 我刚刚添加了一个 for 循环,该循环运行 size 次,每次都添加一个空值:
for (int i = 0; i < size; i++)
tempArray.add(null);
这是最好的解决方案吗?
您正在尝试将 ArrayList 用作映射,因此只需切换到 Map 并将您的键作为整数保存:
Map<Integer, Object> map = new HashMap<>(size);
map.put(index, values.get(leftFirst));
然后通过map.get method获取索引:
map.get(index)
请注意,如果您的索引以一百万开头,您将有 ~million 空值将不会被使用。它似乎非常不必要并且错误地实现了。
编辑
来自 comments/question,使用 T
:
Map<Integer, T> map = new HashMap<>(size);
在我看来,最好的方法是首先创建泛型数组,然后再使用 ArrayList 创建包装器。
1.You 可以看到如何从泛型类型创建数组 here
2.You 可以看到如何从数组创建 ArrayList here