我想将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)
您可以做的是将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)
虽然听起来很诱人,但我建议不要扩展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类.
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |