📜  Java ArrayList trimToSize()(1)

📅  最后修改于: 2023-12-03 15:31:28.636000             🧑  作者: Mango

Java ArrayList trimToSize()

简介

trimToSize()ArrayList 类的一个方法,它用于将 ArrayList 的容量削减到实际存储大小。调用 trimToSize() 后,ArrayList 的容量将变为当前存储元素的数量,从而节省内存空间。

语法格式

以下是 trimToSize() 方法的语法格式:

public void trimToSize()
功能

ArrayList 中的元素被删除时,其内存不会自动减少。因此,如果你有一个 ArrayList 中保存的元素数量较少,而你想节省内存,则可以使用 trimToSize() 方法将其容量调整为实际大小。这里需要注意的是,当 ArrayList 中的元素被添加时,它的容量会自动增长,这种自动增长可以保证 ArrayList 中的元素能够得到合适的存储。

示例

下面是一个使用 trimToSize() 的示例:

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("java");
        list.add("python");
        list.add("c++");
        list.add("php");

        System.out.println("List size before trimToSize() : " + list.size());
        System.out.println("List capacity before trimToSize() : " + getCapacity(list));

        list.trimToSize();

        System.out.println("List size after trimToSize() : " + list.size());
        System.out.println("List capacity after trimToSize() : " + getCapacity(list));
    }

    public static int getCapacity(ArrayList<?> list) {
        try {
            java.lang.reflect.Field capField =
                    ArrayList.class.getDeclaredField("elementData");
            capField.setAccessible(true);
            return ((Object[]) capField.get(list)).length;
        } catch (Exception e) {
            return -1;
        }
    }
}

输出结果:

List size before trimToSize() : 4
List capacity before trimToSize() : 10
List size after trimToSize() : 4
List capacity after trimToSize() : 4

在上面的示例中,我们创建了一个 ArrayList,并添加了一些元素。我们使用 getCapacity() 方法来获取存储 ArrayList 元素的数组数组的大小,从而获取其容量。

在调用 trimToSize() 方法之前,ArrayList 中的元素数量为4,但其容量为10。但是,当我们调用 trimToSize() 方法之后,ArrayList 的容量已经被削减至实际存储的大小,因此其容量变为4。

总结
  • trimToSize() 方法用于将 ArrayList 的容量削减到实际存储大小。
  • 调用 trimToSize() 方法后,ArrayList 的容量将变为当前存储元素的数量。
  • trimToSize() 方法可用于节省内存空间。
  • 当向 ArrayList 中添加元素时,其自动增长以保证元素能够得到合适的存储。