Как ограничить количество элементов, которые можно добавить в список в списке - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть список списков в 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 голосов
/ 04 ноября 2018

В данном конкретном случае удобнее использовать 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], []]
0 голосов
/ 04 ноября 2018

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;
  }
}

2-й метод:

оберните ваш список:

if(list!= null && list.size() < yourLimitSize(){
list.add(yourElement)
}else{
  //  shift
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...