Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе
Вернуться   HPC / Кодинг / Другие Языки / Java
   
  Страница 1
  , 18:54   #1
Местный
 
Аватар для Kzooz
 
Локация: Narnia
Регистрация: 12.02.2011
Сообщений: 271

Репутация: 6 / 0
По умолчанию Массив динамических массивов

Делаю небольшой проект для Android. Имеется: есть количество лент в днях, которое вначале неизвестно и пять дней недели. Есть xml parser, который по мере чтения документа должен заполнить ленты в соответствующих днях недели. Необходимо: создать массив динамических массивов(либо другую подобную структуру) Пробовал сделать примерно так:
Java highlight
static ArrayList<String> lessonList[];
static ArrayList<String> cabienetesList[];
static ArrayList<String> commentsList[]; 
...
static void create () {
  for (int i = 0; i < 5; i++) {
    lessonList[i] = (ArrayList<String>)     new ArrayList<String>();
    cabienetesList[i] = (ArrayList<String>) new ArrayList<String>();
    commentsList[i] = (ArrayList<String>)   new ArrayList<String>();
  }
}
Потом наполнить так:
Java highlight
V.cabienetesList[dayOfWeek].add(xpp.getAttributeValue(i));
Не вышло, получил NullPointerException.
 
Пользователь вне форума    
Наши Спонсоры
  , 07:19   #2
Местный
 
Аватар для Kzooz
 
Локация: Narnia
Регистрация: 12.02.2011
Сообщений: 271

Репутация: 6 / 0
По умолчанию

Вопрос снят.

UPD:
Может быть, кому-то пригодится решение.
Java highlight
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");
  }
}
Цитата:
Другими словами, мы ушли от массивов, потому что массивы сами по себе не динамические, а статические. А вот ArrayList использовать, очень удобно и быстро. Она сделана на основе массивов.
Метод init() сначала инициализирует самые первые три коллекции, а после в цикле создает пустые коллекции для каждого так сказать дня. получается что с индексом 0 у нас будут понедельники, индекс 1 это вторник и т.д. Ну а после в цикле мы сначала получаем данную коллекцию (lessonListWeek.get(4)) и сразу в неё добавляем необходимый элемент.
Коллекция коллекций гораздо удобней в местах, где мы не знаем требуемый размер. Массивы следует использовать только в тех случаях, где мы знаем требуемый размер. Если нам надо после получить массив, то там есть метод toArray, у коллекции. коллекция будет преобразована в массив.
Due to startandroid.ru

 

Последний раз редактировалось Kzooz; 16.06.2013 в 09:54.
Пользователь вне форума    
 

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вводится массив. |Basta| Другие Языки 1 08.12.2011 15:15
[Проблема] Данные в массив cargo29 PHP 3 09.11.2011 10:42
MySql(и не только) в Perl anubis6666 Perl 2 12.04.2010 21:19
Помощь в созданию интернет магазина. noob_kekc Новичкам 4 13.02.2010 11:34
Разрушен RAID массив, как восстановить Angel62 Linux 0 11.10.2009 18:20



Часовой пояс GMT +2
Powered by vBulletin® 3.x.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Copyright © 2008 - 2013 «HPC» Реклама на сайте Правила Форума Пользовательское соглашение Работа на сайте
При копировании материалов ставьте ссылку на источник
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.