如何限制可以添加到列表中列表的项目数

时间:2018-11-03 22:31:37

标签: java list

我有一个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));
 }

但是没有用。我该怎么办?

2 个答案:

答案 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 poll和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], []]