当前位置: 首页 > 知识库问答 >
问题:

java中ArrayList中显式容量设置的意义

凌炜
2023-03-14

在java ArrayList中,我们有一个构造函数-

ArrayList(内部容量)

两种方法-

false ensure容量(int min容量)

void trimToSize()

下面是一些示例代码-

ArrayList<String> arrayList3 = new ArrayList<>(5);
        System.out.println(arrayList3.size());
        arrayList3.add("Zebra");
        arrayList3.add("Giraffe");
        arrayList3.add("Bison");
        System.out.println(arrayList3);
        System.out.println(arrayList3.size());
        arrayList3.add("Rhino");
        arrayList3.add("Hippo");
        arrayList3.add("Elephant");
        arrayList3.add("Antelope");
        System.out.println(arrayList3);
        System.out.println(arrayList3.size());

输出-

0
[Zebra, Giraffe, Bison]
3
[Zebra, Giraffe, Bison, Rhino, Hippo, Elephant, Antelope]
7

在这里,我看不到设置初始容量如何影响程序的执行。ArrayList是一个灵活的列表,可以根据需要更改大小。那么任何显式容量设置的意义是什么?

第二个问题-

在显式容量设置的情况下,是否有任何方法可以查看当前容量,因为int size()显然不适用于此。

共有1个答案

萧鹏云
2023-03-14

ArrayList作为动态数组的实现。

当其基础数组满时(即当前列表索引超过基础数组的最后一个有效索引),它会调整大小。

当它发生时,内部方法add()(或addAll)将调用方法增长()。这将增加2的容量,即创建一个长度比之前的长度大两倍的新数组加上不适合当前大小的新元素的数量。

这种增长的代价是O(n),因为之前添加的所有元素都需要复制到新阵列中。

无参数构造函数创建容量为10ArrayList

如果您认为它应该包含50000元素,那么为了提高性能,在实例化ArrayList时提供容量是有意义的

 类似资料:
  • 本文向大家介绍C#中如何将容量设置为ArrayList中元素的实际数量,包括了C#中如何将容量设置为ArrayList中元素的实际数量的使用技巧和注意事项,需要的朋友参考一下 要将容量设置为ArrayList中元素的实际数量,代码如下- 示例 输出结果 这将产生以下输出- 示例 现在让我们来看另一个示例- 输出结果 这将产生以下输出-

  • 问题内容: 众所周知,Java ArrayList是使用数组实现的,并以10的容量进行初始化,并将其大小增加50%。如何获得当前ArrayList的容量而不是ArrayList的大小。 谢谢 问题答案: 我认为这是不可能的。您的用例是什么?我相信C#ArrayLists具有属性,但是Java ArrayList类不会公开此信息。 您具有接受初始容量参数的构造函数,并且具有可用于减少增量重新分配量的

  • 我想在下面的代码中设置值,我正在使用arraylist如何数据结构,我需要更改int值,它是最后一个值。我在其他类中使用了一个setter来更改这个值,但我尝试用 谢谢..

  • 问题内容: 在JDK 1.7中,该方法使用以下表达式来增加ArrayList.java的数组容量:因此,看来新容量几乎比旧容量增加了50%。 但是在很多书中都说容量翻了一番…所以书没有更新或我不太了解? 问题答案: 您的理解是正确的,newCapacity比oldCapacity大50% 在Java 6中,newCapacity计算为 这是Java之类的开源语言的魅力,您可以看到实现-如果它不符合

  • 问题内容: 我将如何使用Java的ArrayList的getter和setter方法?这就是我所拥有的。我认为我正确地使用了吸气剂,但是我不知道如何为ArrayList使用setter。 问题答案: 要设置值,您可以将pass作为参数,只需将设置为参数即可。 另外,请注意使用而不是问题中所显示的。通常,setter方法不返回任何内容。

  • 我有课 在另一个类中,我从第一个类中获得了一个对象数组 现在我想写一个在第二个数组中查找名称的方法,并为该数组中第一个对象的实例分配一个新值 但我没有得到这个工作。我需要写点什么吗?在set()方法中? 谢谢=)