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

时间:2017-02-14 15:05:19

标签: java arraylist

我已经读过,当我们从Object移除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);      
}  
}  

2 个答案:

答案 0 :(得分:7)

您可能已经读过ArrayList使用的支持数组的大小没有减少,这是真的。如果在ArrayList中放入100个元素,则它将具有至少100个大小的后备数组。即使在Deployment | Synchronize with Deployed...元素之后,该数组的大小也保持不变。要释放该内存,remove()方法可用:

trimToSize()

来自https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#trimToSize()

答案 1 :(得分:0)

有尺寸和容量。

1)大小 - 列表中元素的总量。删除元素后它会减少。

    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

2)容量 - 列表中元素的“单元格”总量。删除元素后它不会减少。

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<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;

您可以在列表中添加4个元素和3个“单元格”,因为当没有足够的容量时,JVM会自动增加列表的容量(公式=(oldCapacity * 3)/ 2 + 1)。

There是下一个代码的图片:

List<String> list = new ArrayList<>();
list.add("0");
list.add("1");

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