如何在Java中实现固定大小的"列表"?

mre*_*mre 8 java arrays list fixed

由于Java核心库没有这样的集合,数组是否是最佳选择,特别是如果不想依赖第三方库?

Avi*_*gal 12

Arrays.asList(T ...) Returns a fixed-size list backed by the specified array

Object[] array = new Object[10];
List<Object> fixedList = Arrays.asList(array);
Run Code Online (Sandbox Code Playgroud)

  • add会给你UnsupportedOperationException,你只能使用set和get,基本上就像一个数组. (4认同)

NPE*_*NPE 5

您可以使用数组,也可以使用ArrayList<E>所需大小进行预初始化.

如果要主动阻止列表的扩展,那么使用数组可能是最简单的.


Laf*_*ica 4

我会围绕 , 编写一个包装类ArrayList,并在addaddAll方法中,在添加新元素之前检查列表的大小。如果已达到最大大小,则可以抛出异常(或不执行任何操作,具体取决于您真正想在代码中执行的操作)。

这是一个简短的例子:

public class SizeLimitedArray<E> implements java.util.List<E>
    {
    private static final int DEFAULT_SIZE_LIMIT = 10;
    private ArrayList<E> myList;
    private int maxSize;

    public SizeLimitedArray ()
        {
        this (DEFAULT_SIZE_LIMIT);
        }

    public SizeLimitedArray (int size)
        {
        myList = new ArrayList<E> (size);
        maxSize = size;
        }

    @Override
    public boolean add (E objectToAdd)
        {
        if (myList.size () > maxSize)
            {
            throw new IllegalStateException ("The array is full");
            }

        return myList.add (objectToAdd);
        }

    @Override
    public boolean addAll (Collection collectionToAdd)
        {
        if (myList.size () + collectionToAdd.size () > maxSize)
            {
            throw new IllegalStateException ("The array is full");
            }

        return myList.addAll (collectionToAdd);
        }

    // Rest of class omitted for brevity
    }
Run Code Online (Sandbox Code Playgroud)