如何创建一个可以在Java中存储50个字符串的ArrayList?

oya*_*n11 2 java arraylist

我想将arraylist限制为50.但我不知道如何.

这是我的代码Object1.java

public class Object1 {

    public String seat_no, id;


    public Object1(String seat_no, String id) {

        this.seat_no = seat_no;
        this.id = id;

    }
}
Run Code Online (Sandbox Code Playgroud)

main.java

private ArrayList<Object1> list;

list = new ArrayList<Object1>();
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 6

您可以做的是将ArrayList扩展为LimitedArrayList并覆盖add方法.

public class LimitedArrayList<E> extends ArrayList<E>{

private final int capacity;

public LimitedArrayList(int capacity) {
    super(capacity);
    this.capacity = capacity;

}
@Override
public boolean add(E e) {
    if(size()>=capacity){
        throw new ListFullExcption();
    }
    return super.add(e);
}

    // there are more add methods to override but i will let you figure that out.
}
Run Code Online (Sandbox Code Playgroud)


Isa*_*aac 6

虽然听起来很诱人,但我建议不要扩展ArrayList或任何其他List实现,因为那时你将限制自己只使用一种类型的列表.如果下次你想限制一个LinkedList而不是一个ArrayList?你会延长LinkedList吗?如果你想限制,基本上是一个任意的实现会发生List什么?

您正在寻找的东西已经存在.您可以使用Commons Collections并使用谓词包装列表:

class SizePredicate implements Predicate {
    private List list;
    private int maxSize;

    public SizePredicate(List l, int size) {
        list = l;
        maxSize = size;
    }

    public boolean evaluate(Object obj) {
        if (list.size() >= maxSize) {
            throw new IllegalStateException("Your message here");
        }
        list.add(obj);
    }
}

...

List list = new LinkedList();  // Or, really, any implementation of list.

List maxList = ListUtils.predicatedList(list, new SizePredicate(list, 50));
Run Code Online (Sandbox Code Playgroud)

使用上面的设计,您可以使用相同的Predicate实例来限制任何类型的列表.你也可以扩展它来处理任何类型的集合......

...无需扩展任何JDK类.