ArrayList ArrayList в Java - PullRequest
       18

ArrayList ArrayList в Java

0 голосов
/ 03 декабря 2011

Я новичок в Java, пришёл из C / C ++ фона.Я пытаюсь написать приложение для музыкального плеера для Android и работаю над функцией сканирования библиотеки.Я хочу иметь иерархическую базу данных в формате Artist -> Album -> Song, где Artist имеет имя и группу альбомов, Album имеет имя, год и группу композиций, а композицию имеет название и номер дорожки.и местоположение файла.

Я создал три класса для хранения этой информации:

public class libraryElementArtist
{
    public String name;
    public ArrayList<libraryElementAlbum> albums;
}

public class libraryElementAlbum
{
    public String name;
    public String year;
    public ArrayList<libraryElementSong> songs;
}

public class libraryElementSong
{
    public String name;
    public int num;
    public String filename;
}

Идея заполнить их проста - отсканировать каждый файл и сначала добавить его исполнителя, а затем альбом,тогда песня.Каждый раз он проверяет, чтобы убедиться, что артист / альбом еще не существует, прежде чем создавать новый.

По сути, я начинаю создавать ArrayList для хранения информации об исполнителе, например:

 ArrayList<libraryElementArtist> libraryData = new ArrayList<libraryElementArtist>();

Затем, чтобы добавить исполнителя в базу данных:

libraryElementArtist newEntry = new libraryElementArtist();
newEntry.name = song_artist;
libraryData.add(newEntry);

А затем добавить альбом:

libraryElementAlbum newEntry = new libraryElementAlbum();
newEntry.name = song_album;
libraryData.get(artistIndex).albums.add(newEntry);

, где artistIndex - это индекс исполнителя альбома в верхней части.Уровень Artist Array.

Когда я запускаю это на устройстве и просматриваю его в отладчике, элементы libraryElementArtist вставляются в массив libraryData, и их имена корректно заполняются. Однако, поле альбомов отображается какnull и попытка добавить альбомы не заполняет никаких данных.

Извините, если это вопрос нуба, как я сказал, что я новичок в Java, и я искал и не могу найти то, что янаходясь в поиске.Кроме того, именно так я и выполнил бы такую ​​задачу в C ++, но не уверен, что это правильный путь Java.

Ответы [ 3 ]

2 голосов
/ 03 декабря 2011

Я думаю, что это Наследование фундамент, поэтому сделайте вашу иерархию классов похожей (использование наследования), поэтому вам нужно сделать только один класс, который имеет все производные свойства своего родительского класса и создайте ArrayList только для этого класса, так что вам не нужно создавать вложенный ArrayList. (Если я не ошибаюсь или если тогда, пожалуйста, объясните). : -)

Или, как правило, создает только один класс, который имеет все свойства , как вы описали выше, и используйте для этого некоторые методы getter, setter и использование этого класса делает ваш ArrayList.

0 голосов
/ 03 декабря 2011

Все конструкторы должны создавать (а не просто объявлять) ArrayLists. Иначе они будут нулевыми. Вы можете начать их с небольшого размера, чтобы сэкономить место. * 1001 например *

песни = новый ArrayList (3);

0 голосов
/ 03 декабря 2011

создайте пользовательский класс с геттерами и сеттерами, затем создайте массив данных с этим типом данных (ваш пользовательский класс)

List<customClass> foo = ArrayList<customClass>

так же, как в комментарии выше, но больше информации

...