2012-12-24 54 views
30

我有兩個相同大小的ArrayList s。清單1由10個名字組成,清單2由他們的電話號碼組成。如何連接兩個ArrayLists?

我想將名字和數字連接成一個ArrayList。我該怎麼做呢?

+0

你到底由CONCAT是什麼意思?建立一個新的名單,其中有10個元素包含姓名和號碼? – Henry

+0

我想在新的Arraylist中有一個字符串,它既有名字又有數字。 – Anirudh

回答

60

您可以使用.addAll()來將第二個列表中的元素添加到第一個列表中:

array1.addAll(array2); 

編輯:根據你上面的說明(「我希望在新的Arraylist中有一個字符串,它既有名字又有數字。「),您將通過第一個列表要循環,並從第二列表中的項目追加到它

事情是這樣的:

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 
} 

如果你把在:

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

您將獲得:

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

您可能想要指定'array3'的大小。即'新的ArrayList (array1.size())'。它也是'size()'而不是'length()'。 – arshajii

14

一個ArrayList中添加到第二的ArrayList爲:

Arraylist1.addAll(Arraylist2); 

編輯:,如果你想從現有的兩個那麼ArrayList中做如創建新的ArrayList:

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

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

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

數字顯示在名字後面,我想要名字和數字在旁邊。你能幫我解決嗎? – Anirudh

+0

@anirudhmaddy:好的,你想在同一索引的新陣列中同時使用名稱+數字嗎? –

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

一個ArrayList1添加到數據,

mArrayList1.add(data); 

和二ArrayList2添加其他數據,

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++]); 
} 

就像你說的, 「姓名和號碼彼此的旁邊」。

2

對不復制條目的輕量級目錄,你可以使用某事像這樣:

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

這裏實現:

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; 
    } 

}