我已经读过,当我们从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);
}
}
答案 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的更多信息。