如何使ArrayList保持初始容量且元素数量不超过3?
问题解答
首先,Java标准库中的ArrayList并没有原生支持限制最大元素数量的功能——你提到的ensureCapacity(int)只是预分配底层数组的容量,避免频繁扩容;trimToSize()是把底层数组收缩到当前元素的实际大小,这两个方法都和限制元素数量没有关系。
要实现元素数量不超过3的限制,最直接的方式是自定义包装类或继承ArrayList,重写所有添加元素的相关方法,在执行添加操作前检查当前元素数量是否已达上限。
以下是一个简单的实现示例:
import java.util.ArrayList; import java.util.Collection; public class SizeLimitedArrayList<E> extends ArrayList<E> { private final int maxSize; public SizeLimitedArrayList(int maxSize) { super(maxSize); // 初始化底层数组容量为上限值 this.maxSize = maxSize; } @Override public boolean add(E e) { if (size() >= maxSize) { throw new IllegalStateException("元素数量已达到上限" + maxSize); // 也可返回false静默拒绝添加,根据业务需求选择处理逻辑 // return false; } return super.add(e); } @Override public void add(int index, E element) { if (size() >= maxSize) { throw new IllegalStateException("元素数量已达到上限" + maxSize); } super.add(index, element); } @Override public boolean addAll(Collection<? extends E> c) { if (size() + c.size() > maxSize) { throw new IllegalStateException("添加后元素数量将超过上限" + maxSize); } return super.addAll(c); } @Override public boolean addAll(int index, Collection<? extends E> c) { if (size() + c.size() > maxSize) { throw new IllegalStateException("添加后元素数量将超过上限" + maxSize); } return super.addAll(index, c); } }
使用方式如下:
SizeLimitedArrayList<Integer> list = new SizeLimitedArrayList<>(3); list.add(1); list.add(2); list.add(3); list.add(4); // 此处会抛出IllegalStateException,阻止超出上限的添加操作
另外,如果你不想自定义类,也可以考虑使用ArrayBlockingQueue——它是一个有界队列,初始化时指定容量,元素满后添加操作会阻塞、抛出异常或返回false(取决于调用的方法),但它的定位是队列,和ArrayList的随机访问等列表操作有差异,需根据实际场景选择。
内容的提问来源于stack exchange,提问作者CrustyCrustecean
相关产品推荐
相关产品推荐

