Как использовать List, ArrayList и / или Array для создания двумерного массива в Java

Я новичок в Java и не могу найти структуру для следующих действий.

Мне нужен массив фиксированной длины. Каждый элемент должен быть массивом (или списком) переменной длины, содержащим строки. Итак, я пробовал ...

ArrayList<String>[] wordList = new ArrayList[maxWordLength];

Я получаю пощечину от Java за то, что «Main.java использует непроверенные или небезопасные операции». и когда я пытаюсь добавить элемент, я получаю "java.lang.NullPointerException"

wordList[oneWord.length()-1].add(oneWord);

Как мне создать свою структуру, чтобы Java была довольна?

Это потому, что у вас есть массив нулевых ArrayLists.

van dench 13.03.2018 19:22

Вы смешиваете ArrayList и Array, то, что вы хотите, кажется просто массивом. Может просто String[] words = new String[maxWordLength]

SomeDude 13.03.2018 19:24

@SomeDude, но разве это не даст мне одномерный массив? Мне нужно два измерения.

CaptainFuzzyFace 13.03.2018 20:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
78
3

Ответы 3

Java не любит массивы универсальных типов. (См. Ограничения на дженерики в руководствах по Java.) Вместо этого используйте список списков:

List<List<String>> wordList = new ArrayList<>(maxWordLength);

Это создает список с начальной емкостью maxWordLength, который может содержать списки String. Первоначальный размер (в отличие от емкости) будет равен 0. Затем вы можете добавить отдельные списки строк в wordList. Чтобы избежать появления NullPointerException позже, вам следует заполнить wordList пустыми списками для начала:

for (int i = 0; i < maxWordLength; i++) {
    wordList.add(new ArrayList<>());
}

Наконец, вы можете добавить слово в конкретный список в wordList с помощью:

wordList.get(oneWord.length() - 1).add(oneWord);

Это не заставляет wordList иметь фиксированную длину, но в остальном должно соответствовать вашим требованиям.

Будь проще: Массив со всеми элементами как массив строк:

List<List<String>> listOfStringsArray = new ArrayList<>();

List<String> stringArray = Arrays.asList("String1", "String2");

listOfStringsArray.add(stringArray);

List - это интерфейс, который должны реализовывать конкретные классы, такие как ArrayList и LinkedList.

ArrayList - это List, оптимизированный для последовательного чтения и добавления и поддерживаемый внутренним массивом.

ArrayList<blah> или List<blah> - это List, который содержит объекты, наследующие blah (или, если это интерфейс, объекты, которые его реализуют).

ArrayList[] на самом деле является массивом ArrayList, когда вы new ArrayList[x], что на самом деле означает создание массива длиной x, содержащего ArrayList. Каждый из ArrayList не назначен, поэтому это неинициализированный объект, по умолчанию это null во многих компиляторах, но вы не можете на это полагаться.

Итак, предположим, вы создали этот массив фиксированной длины, который содержит список переменной длины. вам либо нужно выполнить цикл по массиву и сказать wordList[i] = new ArrayList<String>(), либо вы должны выполнить нулевую проверку перед его назначением и создать новый ArrayList для каждого назначения

Другие вопросы по теме