Массив списков строк

  • 6
  • Недоступна
Иногда задание — это просто задание. Без подвоха, и не стоит искать в нём сложности и глубины. Нужно просто сесть и решить. Перед нами — именно такое задание. Смотрите, как все внятно и просто: создайте массив, элементами которого будут списки строк. А потом заполните массив любыми данными и выведите их на экран.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (158)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Mikhail Nartov 12 уровень
позавчера, 14:54
Ставь лайк, если проинициализировал массив, но забыл создать каждый список в нем :)
Anonymous #2337929 13 уровень
23 декабря 2020, 19:10
Вот эта запись
ArrayList<String>[] result = new ArrayList[3];
Это массив списков. То есть, элемент массива не строка или число, а всего лишь список (другой массив, но воспринимать его нужно просто как элемент сначала, без усложнения, поэтому лучше называть его сейчас именно "список", чтобы не путаться). Поэтому, чтобы что-то в этот список добавить, нужно сначала его создать. Как мы обычно создаем списки(для примера):
ArrayList<String> array = new ArrayList<>();
Только в данной задаче, поскольку мы действуем внутри обычного массива, мы просто заменяем первую часть
ArrayList<String> array
на
list[i]
где i - это индекс элемента нашего основного массива. А дальше, когда все списки созданы, мы уже спокойно добавляем в них элементы. Вот такое понимание,наконец, пришло спустя два дня размышлений над этой конструкцией. Если оно верное, то может кому-то еще поможет, у кого тоже пока есть сложности с абстрактным мышлением.
Ksenia 24 уровень, Киев
12 ноября 2020, 14:01
полезная ссылочка на статью хабр про вариантность (Wladyslaw ниже писал про инвариантность и ковариантность) +супер понятное видео про вариантность в ArrayList
Anton Dityatev 13 уровень, Северодвинск
9 января, 15:42
за видео отдельное спасибо. хороший контент
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
8 ноября 2020, 21:38
Не уловил смысловой нагрузки задачи, по-моему учат плохому. Самое сложно — это понять, что хотят, меня вот с толку сбили списки строк в ТЗ, ну, почему не написать списочный массив из строк, а? И, собственно, инициализация этого массива списочных массивов, тут объясняется как это сделать и почему НЕ стоит так делать. 1. Создаём пару списочных массивов с типом строки. 2. Закидываем в них для виду хотя бы по одной строке. 3. Создаём массив списочных массивов с типом строки: СписочныйМассив<Строка>[] названиеМассива = новый СписочныйМассив[размерМассива]; 4. На этом пункте я просидел около часа, забыв, что это обычный массив и пытаясь в него запихнуть списочные массивы через метод добавить(), а не оператор = 5. Всё получится, но, задача такая себе... -- tlgrm: LetsCodeIt / SefoNotasi
Степан 17 уровень
30 октября 2020, 12:33
Лехко
Степан 17 уровень
30 октября 2020, 12:34
Хотя нет
Максим Бучинский 15 уровень, Минск
29 октября 2020, 07:57
ArrayList<String>[] arrayOfArrayLists = new ArrayList[2];
arrayOfArrayLists[0] = new ArrayList<String>();
arrayOfArrayLists[0].add("123");
arrayOfArrayLists[1] = new ArrayList<String>();
arrayOfArrayLists[1].add("456");
Алексей Морозов 16 уровень, Краснодар
28 октября 2020, 20:36
ArrayList<String>[] arrCreateList = new ArrayList[]{new ArrayList<String>(Arrays.asList("hi")), new ArrayList<String>(Arrays.asList("hi"))};
Алексей Морозов 16 уровень, Краснодар
28 октября 2020, 20:38
... но валидатор не пропускает.
Эндер Посол с красной планеты в четвёртом измерении
26 октября 2020, 12:25
Кто-нибудь знает, почему данный код проходит:
ArrayList<String>[] array = new ArrayList[5];
Но на это компилятор ругается:
ArrayList<String>[] array = new ArrayList<String>[5];
❓❓❓❓❓❓❓❓❓❓❓❓❓
Wladyslaw 41 уровень, Warsaw Master
30 октября 2020, 16:14
Если коротко - из-за стирания типов. Отчасти потому дженерики инвариантны, в отличии от массивов - которые ковариантны. Это значит что если String - потомок Object, то String[] - потомок Object []. Но List<String> - не является потомком List<Object>. Соответственно компилятор не позволит ссылаться на лист стрингов ссылкой на лист объектов, например. Но, если бы мы могли создавать массив дженериков - то было бы возможно вот такое потому что массивы ковариантны и ссылка на массив объектов может ссылаться на любой массив.
List<String>[] lsa = new List<String>[10]; // illegal
Object[] oa = lsa;  // OK because List<String> is a subtype of Object
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[0] = li;
String s = lsa[0].get(0);
Последняя строчка кинет ClassCastException. А дженерики задумывались для того чтобы обеспечить типобезопасность. Неудобно как-то выходит. Потому возможность создавать массив дженериков убрали проверяя это ещё на этапе компиляции. С массивами такой финт тоже возможен, но там исключение будет кинуто сразу при попытке добавления. А чем раньше возникла ошибка - тем она дешевле. А ввиду того что дженерики работают через стирание типов - тип-параметр в рантайме просто не доступен и дженерик не может проверить что в него ложат. И вот в вышеописаном случае возникает потенциальная типонебезопасность. Ошибка, которая не известно когда себя проявит. Только тогда когда кто-то попробует из элемента такого массива что-то вытащить. Вот потому и нельзя. А в первом варианте ты используешь сырой тип и дженерики просто снимают с себя всю ответственность и никаких гарантий тебе не дают. Упадет - ну сам виноват. Но в реальности так делать не стоит
Евгений Кафанов 16 уровень, Москва
2 ноября 2020, 11:21
Почему тогда неизвестная ошибка, что нельзя было описать ошибку.
Wladyslaw 41 уровень, Warsaw Master
2 ноября 2020, 11:26
Почему неизвестная?
Solution.java:10: error: generic array creation
        ArrayList<String>[] array = new ArrayList<String>[5];
                                    ^
1 error
Евгений Кафанов 16 уровень, Москва
24 ноября 2020, 16:42
У меня писала неизвестная ошибка компиляции
Druha 28 уровень
15 октября 2020, 18:37
Мда... массив коллекций
Сэм Фишер 23 уровень, Кишинев
13 октября 2020, 07:24
прошел такой вариант:
ArrayList<String>[] arrayOfStringList = new ArrayList[2];
        arrayOfStringList[0] = new ArrayList<>(Arrays.asList("str1", "str2", "str3"));
        arrayOfStringList[1] = new ArrayList<>(Arrays.asList("str4", "str5", "str6"));

        return arrayOfStringList;
что интересно, когда добавил 0-й элемент, валидатор не пустил, добавил второй элемент и все прошло...
Kostik 13 уровень, Москва
16 октября 2020, 11:59
там написано заполнить массив, а у тебя из 2 мест было 1 заполнено