在 Java 中定义固定大小的列表

2022-08-31 13:57:42

是否可以定义固定大小为 100 的列表?如果不是,为什么这在Java中不可用?


答案 1

如果内存服务于以下情况,这应该可以做到这一点:

List<MyType> fixed = Arrays.asList(new MyType[100]);

答案 2

Java列表是对象的集合...列表的元素。列表的大小是该列表中的元素数。如果希望固定该大小,则意味着您无法添加或删除元素,因为添加或删除元素将违反“固定大小”约束。

实现“固定大小”列表的最简单方法是将元素放入数组中,然后创建列表包装器。包装器将允许您执行类似 和 的操作,但 and 操作将引发异常。Arrays.asList(array)getsetaddremove

如果你想为现有列表创建一个固定大小的包装器,那么你可以使用Apache commons FixedSizeList类。但请注意,此包装器无法阻止其他更改原始列表大小的操作,如果发生这种情况,包装列表可能会反映这些更改。


另一方面,如果您真的想要一个对其大小具有固定限制(或限制)的列表类型,则需要创建自己的List类来实现这一点。例如,您可以创建一个包装类,用于在各种 / 和 / / 操作中实现相关检查。(在迭代器方法中,如果它们受支持。addaddAllremoveremoveAllretainAllremove

那么,为什么Java Collections框架没有实现这些呢?以下是我这么认为的原因:

  1. 需要此的用例很少见。
  2. 在需要这样做的用例中,当操作试图突破限制时,对要做什么有不同的要求;例如,抛出异常,忽略操作,丢弃其他元素以腾出空间。
  3. 具有限制的列表实现对于帮助器方法来说可能是个问题;例如.Collections.sort