java - 这是 "Increase"ArrayList 大小的最佳方法吗?

标签 java arrays size capacity

ArrayList<T> tempArray = new ArrayList<>(size);

我正在为我的合并排序构建一个 tempArray,它将根据上下文对整数或字符串进行排序。因此类型为 T ArrayList。

然后,每当调用此方法时,我都会突然遇到 IndexOutOfBounds 错误:

tempArray.set(index, values.get(leftFirst));

经过一番研究后,我发现容量和大小并不是同一回事。因此,为了“增加”大小,我刚刚添加了一个 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 不会使用的空值。这似乎是非常不必要和错误实现的。

编辑

从评论/问题中,使用 T 声明您的 map :

Map<Integer, T> map = new HashMap<>(size);

关于java - 这是 "Increase"ArrayList 大小的最佳方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094820/

相关文章:

java - 从 EC2 写入 S3

java - 添加依赖到 pom.xml 文件后 Spring Tool Suite 自动关闭

java - 如何保存模型并将其应用于 java 上的测试数据集

c - 如何释放 c 中动态分配的结构数组?

android - 各种 Android 设备的应用程序背景大小

android - Android 中的位图 : Size of resources for displaying as 50dp

java - Ehcache Java Spring MVC 和分页 @Cacheable

python - numpy 将数组作为一个整体进行比较

java - 如何一次读取数组的所有元素并确定数组中已存在的内容?

android屏幕标题栏的图标大小和删除应用程序的名称