2016-07-01 3 views
0

Я действительно не знаю, как спросить об этом, не создавая путаницы, но я попробую.Вставка ArrayLists в ArrayLists

В моем приложении Swing я хочу добавить ArrayList в ArrayList, а затем clear(); второй ArrayList без потери всех данных.

Вот пример:

ArrayList<ArrayList<String>> aList1 = new ArrayList<>(); 
ArrayList<String> aList2 = new ArrayList<>(); 
aList2.add("Object 1"); 
aList2.add("Object 2"); 
aList1.add(aList2); 
aList2.clear(); 
System.out.println(aList1); 

Но тогда все данные будут потеряны и aList1 пуст. Я предполагаю, что это связано с тем, что я добавляю ArrayList как ArrayList, а не как значения. Возможно ли сохранить данные в aList1 при удалении его с aList2, тем самым создавая пространство для будущего использования.

+0

Подсказка: начать чтение Javadocs для библиотеки звонков ты используешь. Например, в большинстве коллекций есть метод ** addAll() **. В вашем коде вы добавляете СПИСОК как СПИСОК к другому СПИСОК. Затем вы очищаете этот список, который вы добавили, и ваш окончательный список содержит только один список EMPTY. – GhostCat

+1

Что делать: 'aList1.add ((ArrayList ) aList2.clone());' – Kartic

+0

+1 на функции клонирования. ArrayList реализует Cloneable https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html –

ответ

0

Просто создайте новый ArrayList Из ArrayList, который вы хотите добавить.

Вот это

ArrayList<ArrayList<String>> aList1 = new ArrayList<>(); 
    ArrayList<String> aList2 = new ArrayList<>(); 
    aList2.add("Object 1"); 
    aList2.add("Object 2"); 
    aList1.add(new ArrayList(aList2)); 
    aList2.clear(); 
    System.out.println(aList1); 
+0

Ты мужчина! Спасибо, это было именно то, что мне нужно! – user6447244

0

Вот шаг за шагом описание вашего кода:

// Define a list of lists named aList1 
ArrayList<ArrayList<String>> aList1 = new ArrayList<>(); 

// Define a list named aList2 
ArrayList<String> aList2 = new ArrayList<>(); 

// Add an element to aList2 
aList2.add("Object 1"); 

// Add an element to aList2 
aList2.add("Object 2"); 


// Add aList2 to aList1 
aList1.add(aList2); 

// Empty aList2 
aList2.clear(); 

// Print aList1. Now aList1 is not empty. Is a list containing just 
// one list of size 0. 
System.out.println(aList1); 

Как показано шаг за шагом. В конце процесса aList1 не пуст. Он содержит только один пустой список.

Очистка aList2 удалить все элементы внутри aList2, потому что aList2 тот же список в позиции 0 aList1 в конце aList1.get(0) существует и является пустой список указал также aList2.

0

рассмотреть возможность использования списка для борьбы в качестве резервного списка вы очистное ..

Пример:

public static void main(String[] args) { 
    final List<List<String>> aList1 = new ArrayList<List<String>>(); 
    final List<String> aList2 = new ArrayList<String>(); 
    final List<String> aList3 = new ArrayList<String>(); 

    aList2.add("Object 1"); 
    aList2.add("Object 2"); 
    aList3.addAll(aList2); 
    aList1.add(aList2); 
    aList1.add(aList3); 
    aList2.clear(); 
    System.out.println(aList1); 
}