import java.util.ArrayList;
public class FixedSizeList<T> extends ArrayList<T> {
public FixedSizeList(int capacity) {
super(capacity);
for (int i = 0; i < capacity; i++) {
super.add(null);
}
}
public FixedSizeList(T[] initialElements) {
super(initialElements.length);
for (T loopElement : initialElements) {
super.add(loopElement);
}
}
@Override
public void clear() {
throw new UnsupportedOperationException("Elements may not be cleared from a fixed size List.");
}
@Override
public boolean add(T o) {
throw new UnsupportedOperationException("Elements may not be added to a fixed size List, use set() instead.");
}
@Override
public void add(int index, T element) {
throw new UnsupportedOperationException("Elements may not be added to a fixed size List, use set() instead.");
}
@Override
public T remove(int index) {
throw new UnsupportedOperationException("Elements may not be removed from a fixed size List.");
}
@Override
public boolean remove(Object o) {
throw new UnsupportedOperationException("Elements may not be removed from a fixed size List.");
}
@Override
protected void removeRange(int fromIndex, int toIndex) {
throw new UnsupportedOperationException("Elements may not be removed from a fixed size List.");
}
}
# 1 楼答案
如果内存用于以下情况,则应该这样做:
# 2 楼答案
是
Commons library提供了一个内置的^{} ,它不支持
add
、remove
和clear
方法(但是允许使用set方法,因为它不修改List
的大小)。换句话说,如果您尝试调用其中一个方法,列表仍然保持相同的大小要创建固定大小的列表,只需拨打
如果您想要指定列表的不可修改视图,或对内部列表的只读访问,则可以使用^{}
# 3 楼答案
通常,固定大小列表的另一种选择是Java数组。默认情况下,列表在Java中允许增长/收缩。但是,这并不意味着您不能拥有固定大小的列表。您需要做一些工作并创建一个自定义实现
您可以使用clear、add和remove方法的自定义实现来扩展ArrayList
例如
# 4 楼答案
Java列表是对象的集合。。。列表中的元素。列表的大小是该列表中的元素数。如果希望该大小是固定的,这意味着您不能添加或删除元素,因为添加或删除元素将违反“固定大小”约束
实现“固定大小”列表的最简单方法(如果这是您真正想要的!)将元素放入数组,然后
Arrays.asList(array)
创建列表包装器。包装器将允许您执行诸如get
和set
之类的操作,但是add
和remove
操作将抛出异常如果您想为现有列表创建一个固定大小的包装器,那么可以使用apachecommons ^{} 类。但是请注意,这个包装器无法阻止其他更改原始列表大小的操作,如果发生这种情况,包装的列表可能会反映这些更改
另一方面,如果您确实希望列表类型的大小有固定的限制,那么您需要创建自己的列表类来实现这一点。例如,您可以创建一个包装类,它在各种
add
/addAll
和remove
/removeAll
/retainAll
操作中实现相关检查。(和迭代器remove
方法中,如果支持的话。)那么为什么Java集合框架不实现这些呢?以下是我这么认为的原因:
Collections.sort
李># 5 楼答案
对。您可以将java数组传递给Arrays.asList(Object[])
不能向fixedSizeList插入新字符串(它已经有100个元素)。只能按如下方式设置其值:
这样你就有了一个固定大小的列表。它的功能就像一个数组,我想不出使用它的好理由。我很想听听你为什么希望固定大小的集合是一个列表,而不是仅仅使用数组
# 6 楼答案
创建一个大小为100的数组。如果需要List接口,那么对其调用Arrays.asList。它将返回一个由数组支持的固定大小的列表