Java arraylist的remove()方法导致arraylist的大小缩小

Java arraylist的remove()方法导致arraylist的大小缩小,java,arraylist,Java,Arraylist,我已经读到,当我们从ArrayList中删除对象时,它的大小不会减小 我尝试了下面的代码来测试这一点,但发现大小减小了。有人能给我纠正或解释一下吗 package collections; import java.util.ArrayList; import java.util.List; public class ArrayListExample { public static void main(String[] args) { //Creating list of Bo

我已经读到,当我们从
ArrayList
中删除
对象时,它的大小不会减小

我尝试了下面的代码来测试这一点,但发现大小减小了。有人能给我纠正或解释一下吗

package collections;

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {  
public static void main(String[] args) {  
    //Creating list of Books  
    List<Book> list=new ArrayList<Book>();  
    //Creating Books  
    Book b1=new Book(101,"Let us C","Yashwant Kanetkar","BPB",8);  
    Book b2=new Book(102,"Data Communications & Networking","Forouzan","Mc Graw Hill",4);  
    Book b3=new Book(103,"Operating System","Galvin","Wiley",6);  
    //Adding Books to list  
    list.clear();
    list.add(b1);  
    list.add(b2);  
    list.add(b3); 
    list.contains(b3);
    int size= list.size();
    System.out.println(size);
    list.remove(b3);
    int size1= list.size();
    System.out.println(size1);      
}  
}  
package集合;
导入java.util.ArrayList;
导入java.util.List;
公共类ArrayListExample{
公共静态void main(字符串[]args){
//创建图书列表
列表=新的ArrayList();
//创作书籍
b1册=新书(101本,“让我们来C”,“亚什旺·卡内卡”,“BPB”,8);
b2册=新书(102,《数据通信与网络》,《福鲁赞》,《麦克格雷希尔》,4);
书b3=新书(103,“操作系统”、“高尔文”、“威利”,6);
//将书籍添加到列表中
list.clear();
列表。添加(b1);
列表。添加(b2);
列表。添加(b3);
列表。包含(b3);
int size=list.size();
系统输出打印项次(尺寸);
列表。删除(b3);
int size1=list.size();
系统输出打印LN(尺寸1);
}  
}  

您可能读到ArrayList使用的支持数组的大小没有减小,这是正确的。如果在ArrayList中放入100个元素,它将有一个大小至少为100的后备数组。即使在
remove()
元素之后,该数组的大小也保持不变。要释放该内存,可以使用
trimToSize()
方法:

public void trimToSize()
Trims the capacity of this ArrayList instance to be the list's current size. An application can use this operation to minimize the storage of an ArrayList instance.

可以看出大小和容量

1) Size—列表中元素的总数。拆下滤芯后,压力会降低

    list.add(b1);  
    list.add(b2);  
    list.add(b3); 
    System.out.println(list.size());//size is 3
    list.remove(b3);
    System.out.println(list.size());//size is 2 after remove
List<Book> list1 = new ArrayList<>(3); //there is 3 "cells" for books
List<Book> list2 = new ArrayList<>(); //there is 10 "cells" for books(default value)
2) 容量—列表中元素的“单元”总数。拆下滤芯后不会降低

    list.add(b1);  
    list.add(b2);  
    list.add(b3); 
    System.out.println(list.size());//size is 3
    list.remove(b3);
    System.out.println(list.size());//size is 2 after remove
List<Book> list1 = new ArrayList<>(3); //there is 3 "cells" for books
List<Book> list2 = new ArrayList<>(); //there is 10 "cells" for books(default value)
List列表1=新的ArrayList(3)//书有3个“单元”
List list2=新的ArrayList()//书籍有10个“单元格”(默认值)
您仍然可以这样做:

List<Book> list1 = new ArrayList<>(3); // 3 "cells" for books
list.add(b1); //capacity = 3; size = 1; 
list.add(b2); //capacity = 3; size = 2; 
list.add(b3); //capacity = 3; size = 3; 
list.add(b4); //capacity = (3 * 3) / 2 + 1 = 5; size = 4;
List列表1=新的数组列表(3);//3个用于书籍的“单元”
列表。添加(b1)//容量=3;尺寸=1;
列表。添加(b2)//容量=3;尺寸=2;
列表。添加(b3)//容量=3;尺寸=3;
列表。添加(b4)//容量=(3*3)/2+1=5;尺寸=4;
您可以在包含3个“单元”的列表中添加4个元素,因为当容量不足时,JVM将自动增加列表的容量(公式=(oldCapacity*3)/2+1)

是下一个代码的图片:

List<String> list = new ArrayList<>();
list.add("0");
list.add("1");
List List=new ArrayList();
列表。添加(“0”);
列表。添加(“1”);

您可以阅读有关容量的更多信息。

我已经了解到,当我们从Arraylist中删除一个对象时,它的大小不会减小。。。你在哪里读到的?你在哪里读到的?也许您阅读了一些关于数组而不是ArrayList的内容?也许底层存储不会减少其大小(这将是一个实现细节),但是
size
方法将始终反映列表中包含的实际元素数,如javadocs中所述。