隐式和显式ArrayList大小声明之间的区别?

v0l*_*0rt 6 java collections arraylist

以下声明之间有什么区别:

List list1 = new ArrayList();

List list2 = new ArrayList(10);
Run Code Online (Sandbox Code Playgroud)

默认情况下将其分配为10.但是有什么区别吗?我可以添加一个11要素来list2通过list2.add("something")

Sur*_*tta 6

以下是第一个示例的源代码

public  ArrayList() {
    this(10);
 }
Run Code Online (Sandbox Code Playgroud)

所以没有区别.由于初始容量是10,无论你是否通过10,它都会被初始化,容量为10.

我可以通过list2.add("something")在list2中添加第11个元素吗?

当然,初始容量不是最终容量.因此,当您继续添加超过10个时,列表的大小会不断增加.

如果你想要一个固定大小的容器使用Arrays.asListasList

值得一读的关于Java 8中的这一变化:在Java 8中,为什么ArrayList的默认容量现在为零?

简而言之,提供初始容量不会真正改变任何大小的内容.

  • 请注意,您链接的源代码来自JDK 6.较新的JDK的行为完全不同 - 请参阅上面的答案. (2认同)
  • @ v0ld3m0rt大小不是容量.容量为10,大小仍为零,因为您没有添加任何内容. (2认同)