Массив динамических массивов

Ответить
kzooz
Сообщения: 1
Зарегистрирован: 06 июн 2013, 00:12

Массив динамических массивов

Сообщение kzooz » 06 июн 2013, 23:50

Доброго времени суток. Делаю небольшой проект для Android. Имеется: количество лент в днях, которое вначале неизвестно и пять дней недели. Есть xml parser, который по мере чтения документа должен заполнить ленты в соответствующих днях недели. Необходимо: создать массив динамических массивов(либо другую подобную структуру) Пробовал сделать примерно так:
[syntax=java]static ArrayList<String> lessonList[];
static ArrayList<String> cabienetesList[];
static ArrayList<String> commentsList[];
...
static void create () {
for (int i = 0; i < 5; i++) {
lessonList = (ArrayList<String>) new ArrayList<String>();
cabienetesList = (ArrayList<String>) new ArrayList<String>();
commentsList = (ArrayList<String>) new ArrayList<String>();
}
}
[/syntax]
Потом наполнить так:
[syntax=java]V.cabienetesList[dayOfWeek].add(xpp.getAttributeValue(i));[/syntax]
Не вышло, получил NullPointerException.
Подскажите пожалуйста в какую сторону копать.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Массив динамических массивов

Сообщение Mikhail_dev » 07 июн 2013, 09:07

Что-то странная структура. Я бы предложил вариант
[syntax=java]
static ArrayList<ArrayList<String>> lessonListWeek;
static ArrayList<ArrayList<String>> cabienetesListWeek;
static ArrayList<ArrayList<String>> commentsListWeek;
...
//5 в скобках - это первоначальное кол-во элементов коллекции. у нас 5 дней
static void init() {
//инициализация основных коллекций
lessonListWeek = new ArrayList<List<String>>(5);
cabienetesListWeek = new ArrayList<List<String>>(5);
commentsListWeek = new ArrayList<List<String>>(5);
//подготовка коллекций в коллекциях.
for (int i = 0; i < 5; i++) {
lessonListWeek.add(new ArrayList<String>())
cabienetesListWeek.add(new ArrayList<String>());
commentsListWeek.add(new ArrayList<String>());
}
}
...
static void create () {
for (int i = 0; i < 5; i++) {
//допустим нам нужна пятница. она с индексом 4.
lessonListWeek.get(4).add("some data");
cabienetesListWeek.get(4).add("some data");
commentsListWeek.get(4).add("some data");
}
}
[/syntax]
Другими словами, мы ушли от массивов, потому что массивы сами по себе не динамические, а статические. А вот ArrayList использовать, очень удобно и быстро. Она сделана на основе массивов.
Метод init() сначала инициализирует самые первые три коллекции, а после в цикле создает пустые коллекции для каждого так сказать дня. получается что с индексом 0 у нас будут понедельники, индекс 1 это вторник и т.д. Ну а после в цикле мы сначала получаем данную коллекцию (lessonListWeek.get(4)) и сразу в неё добавляем необходимый элемент.
Коллекция коллекций гораздо удобней в местах, где мы не знаем требуемый размер. Массивы следует использовать только в тех случаях, где мы знаем требуемый размер. Если нам надо после получить массив, то там есть метод toArray, у коллекции. коллекция будет преобразована в массив.

Ответить