#java #java-8
#java #java-8
Вопрос:
Я пытаюсь установить начальную емкость вложенного ArrayList
в некоторое значение (скажем, 10), но когда я попытался получить доступ к внутреннему списку, чтобы добавить какой-то элемент, который он мне выдает ArrayOutOfBoundException
. Пожалуйста, предложите какое-нибудь хорошее решение!!!
Ниже приведен фрагмент кода
public static void main(String[] args)
{
ArrayList<ArrayList<Integer>> bucket = new ArrayList<ArrayList<Integer>>();
System.out.println(bucket.get(5).add(5));
System.out.println(bucket);
}
Комментарии:
1. Установка начальной емкости ничего не изменит. Вы не можете получить доступ к элементу списка, если индекс недействителен, независимо от емкости. Если вы хотите получить доступ к элементу с индексом 5, то размер списка должен быть не менее 6
2. Начальная емкость — это не фактический размер, а просто ограничение на количество выделяемого пространства.
3. @JBNizet Есть ли какой-нибудь выход???
4.
ArrayList<ArrayList<Integer>> bucket = Stream.generate(ArrayList<Integer>::new) .limit(size).collect(Collectors.toCollection(ArrayList::new));
Ответ №1:
Код :
public class Example {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> bucket = new ArrayList<ArrayList<Integer>>();
//initial capacity of the nested arraylist to 5.
System.out.println(bucket.add(new ArrayList<>(5)));
ArrayList<Integer> element = new ArrayList<>();
element.add(5);
bucket.add(0, element);
System.out.println(bucket);
}
}
Вывод :
true
[[5], []]
Ответ №2:
System.out.println(bucket.get(5).add(5));
Вам нужно понять эту строку кода, вы пытаетесь получить доступ к пятому элементу из списка массивов «bucket», но добавили ли вы какие-либо элементы в корзину ArrayList
(в вашем случае элемент является другим списком массива)
Пока вы не добавите свои элементы, вы не сможете получить к ним доступ, поскольку они не существуют, следовательно, вы видите ArrayOutOfBoundException
, когда пытаетесь получить доступ к 5-му элементу по адресу bucket.get(5)
возможно, вы захотите использовать javadoc ArrayListhttps://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Комментарии:
1. Есть ли какой-либо способ, с помощью которого я могу инициализировать переменную «bucket» с «N» пустым Arraylist, как тот, который я попробовал в этом случае….
Ответ №3:
Начиная с Java 8, вы можете сгенерировать список пустых списков с помощью Stream.generate
.
import java.util.*;
import java.util.stream.*;
public class ListOfLists {
public static void main(String[] args) {
List<List<Integer>> bucket = listOfList(10);
bucket.get(5).add(5);
System.out.println(bucket);
}
public static <T> List<List<T>> listOfList(int size) {
return Stream.generate(ArrayList<T>::new).limit(size).collect(Collectors.toList());
}
}
Вывод
[[], [], [], [], [], [5], [], [], [], []]