2

我想将数组列表限制为 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;

    }
}

main.java

private ArrayList<Object1> list;

list = new ArrayList<Object1>();
4

5 回答 5

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.
}
于 2012-12-01T07:21:45.053 回答
6

尽管听起来很诱人,但我建议不要扩展ArrayList或任何其他List实现,因为那样您将限制自己只使用一种类型的列表。如果下次你想限制 aLinkedList而不是a 会发生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));

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

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

于 2012-12-01T07:31:13.673 回答
0

你有两个选择:

您可以创建一个字符串数组,在这里您可以选择设置最大大小。或者

您可以创建一个新类,该类将扩展 ArrayList 并覆盖其 add() 方法。

于 2012-12-01T07:28:35.943 回答
0

试试这个代码

public class UserInformation {

    private String userId;
    private String name;
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public void setUsername(String name) {
        this.name = name;
    }  
    }

添加数据

public List<UserInformation> userInfo= new ArrayList<UserInformation>();
    public UserInformation objuserinfo= null;


              for(int i=0;i<50;i++)
               {
                 objuserinfo = new UserInformation();
                objuserinfo.setUserId("ID");
                objuserinfo.setUsername("name");
                userInfo.add(objuserinfo);
                }
于 2012-12-01T07:43:51.503 回答
-2

你不能做吗

ArrayList list = new ArrayList(size);
于 2012-12-01T12:05:46.270 回答