首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java arraylist ensureCapacity无法正常工作

Java ArrayList 确保容量有效性的方法

在 Java 中,ArrayList 是一个动态数组列表,它允许你添加、删除和访问元素。ensureCapacity 是一个用于扩展或收缩数组容量的方法。然而,在某种情况下,ensureCapacity 可能无法正常工作。

问题

代码语言:java
复制
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("World");

        System.out.println("List size: " + list.size()); // 输出:List size: 2

        list.ensureCapacity(10);
        System.out.println("New list size: " + list.size()); // 输出:New list size: 10
    }
}

在这个示例中,我们创建了一个 ArrayList,并向其中添加两个元素。然后,我们调用 ensureCapacity 方法来扩展列表容量,使其可容纳 10 个元素。但奇怪的是,ensureCapacity 似乎没有生效,list.size() 仍然等于 2。

原因和解决方案

问题原因可能是:ensureCapacity 无法正常工作,因为列表中已有元素数量超过了容量。在这种情况下,我们需要在添加元素之前调用 ensureCapacity,而不是在添加元素之后。

解决方案如下:

代码语言:java
复制
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("World");

        System.out.println("List size: " + list.size()); // 输出:List size: 2

        // 在添加元素之前调用 ensureCapacity
        list.ensureCapacity(10);
        System.out.println("New list size: " + list.size()); // 输出:New list size: 10
        
        // 添加元素
        list.add("Another element");
        System.out.println("New list size: " + list.size()); // 输出:New list size: 11
    }
}

现在,我们在添加元素之前调用 ensureCapacity,并添加另一个元素。这次,ensureCapacity 正常工作,list.size() 变为 11。

结论

当使用 ArrayList 时,确保在添加元素之前调用 ensureCapacity,以防止数组容量不足。在本例中,添加元素之后调用 ensureCapacity 没有效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【深入理解java集合系列】ArrayList实现原理

    ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。 注意,此实现不是同步的。如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。

    01
    领券