Jak sklonować ArrayList ?

0

Jak w prosty sposób sklonować ArrayList ?

 
String [] tablica = {"Ala","Adam","Marek","Stefan","Zygmunt","Jola","Marta"};

List<String> list = new ArrayList<String>();
List<String> listCopy = new ArrayList<String>();

    for (String wpis : tablica) { 
        list.add(wpis);                       
    }
// No i teraz chce zklonować lub zkopiować tą tablicę tal zeby jej nie przepisywać kolejny raz

    listCopy = list.clone();  ?????

?

0

A w Google nie ma? *

* - pytanie retoryczne

Rozwiązanie: http://stackoverflow.com/questions/5785745/make-copy-of-array-java
Rozwinięcie tematu, gdyby Cię interesowało (w co wątpię): http://stackoverflow.com/questions/5821851/does-calling-clone-on-an-array-also-clone-its-contents

0

Ponad godzinę przeglądam net fora itp i jakoś nie znalazłem rozwiązania.

0

Przede wszystkim możesz z tablicy zrobić listę nieco ładniej:
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList(T...)

A dodać wszystkie elementy z jednej kolekcji do drugiej:
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#addAll(java.util.Collection)

0

Pomimo tylu życzliwych odpowiedzi dalej nie wiem jak to zrobić.

2
ArrayList<Integer> arrayList = new ArrayList();
ArrayList<Integer> arrayListCopy = new ArrayList(arrayList);
1

Pytanie co chcesz uzyskać?

String [] tablica = {"Ala","Adam","Marek","Stefan","Zygmunt","Jola","Marta"};
 
List<String> list = Arrays.asList(tablica);
List<String> listCopy = Arrays.asList(tablica);

masz dwie listy wskazujące na tą samą tablicę. Zmiana w tablicy spowoduje zmianę w obu listach.

czy też:

String [] tablica = {"Ala","Adam","Marek","Stefan","Zygmunt","Jola","Marta"};
 
List<String> list = Arrays.asList(tablica);
List<String> listCopy = list.stream().collect(Collectors.toList());

Gdzie druga lista jest "płytką" kopią pierwszej. "Płytka", czyli obie listy wskazują na te same obiekty, ale w przypadku String nie ma to znaczenia, bo obiekty są niezmienne.

Bezpośrednie wołanie clone na zmiennej zadeklarowanej jako List nie zadziała (widoczność metod).

0

chce usunąć kilka elementów z drugiej tablicy tak żeby pierwsza pozostała niezmienna.

 
String [] tablica = {"Ala","Adam","Marek","Stefan","Zygmunt","Jola","Marta"};

List<String> list = new ArrayList<String>();
List<String> listCopy = new ArrayList<String>();

    for (String el : tablica) { 
        list.add(el);                    
    }
listCopy = new ArrayList<String>(list);

   listCopy.remove(0);
   listCopy.remove(0);
   listCopy.remove(0);
   listCopy.remove(0);

for (String el : listCopy) {
    System.out.println(el);
}
System.out.println("\n\n");
        
for (String el : list) {
    System.out.println(el);
}

Sprawdzałem to wygląda na to że działa.

0

Rzuć okiem jeszcze na mój drugi listing.

0
String [] tablica = {"Ala","Adam","Marek","Stefan","Zygmunt","Jola","Marta"};


List<String> list = Arrays.asList(tablica);
List<String> listCopy = list.stream().collect(Collectors.toList());    
    
   listCopy.remove(0);
   listCopy.remove(0);
   listCopy.remove(0);
   listCopy.remove(0);

for (String el : listCopy) {
    System.out.println(el);
}
System.out.println("\n\n");
        
for (String el : list) {
    System.out.println(el);
}
 

Sprawdziłem działa bardzo dobrze :)

0

A jak się to ma do użycia funkcji clone();??

1

Metoda clone jest oznaczona jako protected. Oznacza to, że na poziomie interfejsu List nie jest widoczne. Jeżeli chcesz z niej korzystać, zmienna musi być zadeklarowana jako na przykład ArrayList. W przypadku tego typu klonowanie polega na wykonaniu płytkiej kopii tablicy w której lista trzyma obiekty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1