2015-07-28 2 views
4

Я хотел бы сохранить ввод пользователя в ArrayList, а затем поместить этот ArrayList в другой ArrayList. Таким образом, вроде как основная категория, которая содержит подкатегории, содержащие данные.Могу ли я создать ArrayList в ArrayList (java)?

Вот некоторые из кода:

ArrayList<String> mainCat = new ArrayList<>(); 
    ArrayList<String> subCat = new ArrayList<>(); 

Могу ли я добавить "подкатегорию" ArrayList в ArrayList "mainCat"?

+4

Вы хотели бы структуру данных, чтобы отразить основную категорию -> подкатегории иерархии? Возможно, лучшим вариантом будет «Карта <Строка», «Список >» (отображение основных категорий в списки подкатегорий). –

+0

Я согласен с Mic, карта, вероятно, лучший вариант в этом случае. – alcfeoh

+0

@MickMnemonic почему карта? из-за проблемы столкновения и быстрее найти строку типа arraylist? –

ответ

1

Я хотел бы использовать Map для этой цели, потому что это делает его более легким для поиска подкатегорий на основе основной категории. Если вы используете List<List<String>>, у вас фактически нет способа определить, в какую основную категорию принадлежит данная подкатегория. Вот пример с использованием TreeMap (которая автоматически сохраняет основные категории в алфавитном порядке):

Map<String, List<String>> mainCategories = new TreeMap<>(); 
mainCategories.put("A", Arrays.asList("A1", "A2", "A3")); 
mainCategories.put("B", Arrays.asList("B1", "B2")); 
mainCategories.put("C", Arrays.asList("C1")); 

System.out.println(mainCategories); 
System.out.println(mainCategories.get("B")); 

Это печатает

 
{A=[A1, A2, A3], B=[B1, B2], C=[C1]} 
[B1, B2] 
1

Почему нет? Но вам нужно сделать небольшое изменение в определении mainCat:

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

Поскольку элементы в коллекции mainCat не будет строка, а коллекции.

+0

ваш список должен иметь тип, не так ли? он чувствует себя очень сырым? –

+0

@KickButtowski Что ты говоришь? Его первый список использует 'List' как аргумент типа, второй использует' String'. Оба имеют аргументы типа, указанные –

+0

@VinceEmigh он ответил на его вопрос –

0

Уверенный, вы можете.

List<List<String>> mainCat = new ArrayList<ArrayList<String>>(); 
List<String> subCat = new ArrayList<String>(); 

mainCat.add(subCat); 
+0

, если вы можете добавить хорошее объяснение, я более чем счастлив проголосовать за вас –

6

Конечно! Добавьте его так же, как и любой другой ArrayList, за исключением типа ArrayList<String>.

ArrayList<ArrayList<String>> mainCat = new ArrayList<ArrayList<String>>(); 
ArrayList<String> subCat = new ArrayList<>(); 
mainCat.add(subCat); 
Смежные вопросы