2012-12-24 7 views
30

Ich habe zwei ArrayList s von gleicher Größe. Liste 1 besteht aus 10 Namen und Liste 2 besteht aus ihren Telefonnummern.Wie werden zwei ArrayLists zusammengefasst?

Ich möchte die Namen und die Nummer in eine ArrayList concat. Wie mache ich das?

+0

was von Concat bedeuten haben Sie genau? Erstellen Sie eine neue Liste mit 10 Elementen, die Name und Nummer enthalten? – Henry

+0

Ich möchte eine einzelne Zeichenfolge in der neuen Arraylist, die sowohl Name und Nummer hat. – Anirudh

Antwort

60

Sie verwenden können .addAll() füge die Elemente der zweiten Liste zu der ersten hinzu:

array1.addAll(array2); 

Bearbeiten: Basierend auf Ihrer obigen Erklärung ("Ich möchte eine einzelne Zeichenfolge in der neuen Arraylist, die sowohl Name und Nummer hat. „), würden Sie eine Schleife durch die erste Liste wollen und das Element aus der zweiten Liste anhängen

Etwas wie folgt aus:.

array1 : ["a", "b", "c"] 
array2 : ["1", "2", "3"] 
:

int length = array1.size(); 
if (length != array2.size()) { // Too many names, or too many numbers 
    // Fail 
} 
ArrayList<String> array3 = new ArrayList<String>(length); // Make a new list 
for (int i = 0; i < length; i++) { // Loop through every name/phone number combo 
    array3.add(array1.get(i) + " " + array2.get(i)); // Concat the two, and add it 
} 

Wenn Sie setzen in

Sie erhalten:

array3 : ["a 1", "b 2", "c 3"] 
+2

Sie können die Größe von 'array3' angeben. d. h. 'new ArrayList (array1.size())'. Es ist auch 'size()' nicht 'length()'. – arshajii

14

fügen Sie eine Arraylist zweite Arraylist als:

Arraylist1.addAll(Arraylist2); 

EDIT: wenn Sie von zwei neuen Arraylist erstellen Arraylist vorhandene dann tun, wie:

ArrayList<String> arraylist3=new ArrayList<String>(); 

arraylist3.addAll(Arraylist1); // add first arraylist 

arraylist3.addAll(Arraylist2); // add Second arraylist 
+0

Die Nummern werden nach den Namen angezeigt, ich möchte die Namen und Nummern nebeneinander. Kannst du mir bitte helfen? – Anirudh

+0

@anirudhmaddy: ok du willst beide name + nummer in neuer arraylist bei gleichem index? –

2
ArrayList<String> resultList = new ArrayList<String>(); 
resultList.addAll(arrayList1); 
resultList.addAll(arrayList2); 
2

One ArrayList1 auf Daten hinzufügen,

mArrayList1.add(data); 

und Zweite ArrayList2 andere Daten hinzuzufügen,

mArrayList2.addAll(mArrayList1); 
0
var arr3 = new arraylist(); 
for(int i=0, j=0, k=0; i<arr1.size()+arr2.size(); i++){ 
    if(i&1) 
     arr3.add(arr1[j++]); 
    else 
     arr3.add(arr2[k++]); 
} 

wie Sie sagen, "die Namen und Nummern nebeneinander".

2

für eine leichte Liste, die nicht die Einträge kopiert, können Sie etw wie folgt verwenden:

List<Object> mergedList = new ConcatList<>(list1, list2); 

hier die Umsetzung:

public class ConcatList<E> extends AbstractList<E> { 

    private final List<E> list1; 
    private final List<E> list2; 

    public ConcatList(final List<E> list1, final List<E> list2) { 
     this.list1 = list1; 
     this.list2 = list2; 
    } 

    @Override 
    public E get(final int index) { 
     return getList(index).get(getListIndex(index)); 
    } 

    @Override 
    public E set(final int index, final E element) { 
     return getList(index).set(getListIndex(index), element); 
    } 

    @Override 
    public void add(final int index, final E element) { 
     getList(index).add(getListIndex(index), element); 
    } 

    @Override 
    public E remove(final int index) { 
     return getList(index).remove(getListIndex(index)); 
    } 

    @Override 
    public int size() { 
     return list1.size() + list2.size(); 
    } 

    @Override 
    public void clear() { 
     list1.clear(); 
     list2.clear(); 
    } 

    private int getListIndex(final int index) { 
     final int size1 = list1.size(); 
     return index >= size1 ? index - size1 : index; 
    } 

    private List<E> getList(final int index) { 
     return index >= list1.size() ? list2 : list1; 
    } 

}