我有一个Java列表列表,其中有3个整数列表。
List<List<Integer>> L;
myList = new ArrayList<>();
for(int i=0; i<3; i++){
myList.add(new ArrayList<Integer>());
}
myList.get(0).add(1);
myList.get(0).add(2);
myList.get(0).add(3);
myList.get(0).add(4);
myList.get(1).add(1);
myList.get(1).add(2);
.
.
.
我的问题是,在我的代码中可以添加到每个列表的项目数是无限的,但是我想限制每个列表可以获取的项目数。例如,每个列表只能得到4个项目,而当其中一个列表收到第5个项目时,我需要向左移动,以便可以将第5个项目添加到列表中。 这是我打算做的一个例子:
首先:myList = [[1,2,3,4],[1,2,3,4],[1,2,3,4]]
在第5个项目添加到myList的第一个列表之后:myList = [[2,3,4,5],[1,2,3,4],[1,2,3,4]]
我试图通过以下方式限制数量:
for(int i=0; i<3; i++){
myList.add(new ArrayList<Integer>(4));
}
但是没有用。我该怎么办?
答案 0 :(得分:1)
第一种方法: 随意创建自定义List / ArrayList。
public class CustomArrayList extends ArrayList<Object> {
@Override
public boolean add(Object e) {
if (this.size() < yourLimitSize) {
return super.add(e);
}
// shift
return false;
}
}
第二种方法:
在列表中添加以下内容:
if(list!= null && list.size() < yourLimitSize(){
list.add(yourElement)
}else{
// shift
}
答案 1 :(得分:0)
在这种特殊情况下,如果元素数量在Queue
LIMIT
以便总是轮询列表中的第一个元素更为方便。 >
final int LIMIT = 4;
List<Queue<Integer>>
myList = new ArrayList<>();
for(int i=0; i<3; i++){
myList.add(new LinkedList<Integer>());
}
myList.get(0).add(1);
myList.get(0).add(2);
myList.get(0).add(3);
myList.get(0).add(4);
myList.get(1).add(1);
myList.get(1).add(2);
System.out.println(myList);
myList.get(0).add(5);
if(myList.get(0).size() > LIMIT){
myList.get(0).poll();
}
System.out.println(myList);
}
输出:
[[1, 2, 3, 4], [1, 2], []]
[[2, 3, 4, 5], [1, 2], []]