2016-03-23 86 views
2

我有2個ArrayList,我需要從某個起點換出兩個元素之間的元素。在ArrayList之間交換元素

我當前的代碼看起來是這樣的:

List<Character> seq1 = new ArrayList<Character>(someArrayList); 
    List<Character> seq2 = new ArrayList<Character>(someArrayList); 
    List<Character> tmp1 = new ArrayList<Character>(someArrayList); 
    List<Character> tmp2 = new ArrayList<Character>(someArrayList); 

     for(int i = start1; i <= seq1.size()-1; i++){ 
      tmp1.set(i,seq2.get(i)); 
     } 
     for(int i = start2; i <= seq2.size()-1; i++){ 
      tmp2.set(i,seq1.get(i)); 
     } 
     for(int i = start1; i <= seq1.size()-1; i++){ 
      tmp1.set(i,seq2.get(i)); 
     } 
     for(int i = start2; i <= seq2.size()-1; i++){ 
      tmp2.set(i,seq1.get(i)); 
     } 

假設start1start2都是4

例如:

seq1: {A,A,A,A,B,B,B,B} 

seq2: {A,A,A,A,C,C,C,C} 

最終的結果應該是:

seq1:{A,A,A,A,C,C,C,C} 

seq2:{A,A,A,A,B,B,B,B} 

但我的似乎仍然以他們的原始價值迴歸。 任何幫助,不勝感激。

+0

代替原來的名單你爲什麼不全部列表添加到'SEQ1 - > TMP1,seq2-> tmp2'做明確列表並交換清單? – soorapadman

回答

1

在收集的情況下,您將不需要任何臨時交換變量或其他東西。只需更換值。

for(int i = start1, j = start2; i < seq1.size() && j < seq2.size(); i++, j++){ 
    seq1.set(i, seq2.set(j, seq1.get(i))); 
} 
+0

我想我會給你'正確的答案',因爲你對我的要求沒有錯。使用你的for循環和建議,我的問題是我的單元測試沒有測試這些聲明的數組列表,因爲seq1和seq2有NEW而不是實際引用,因此不是被單元測試的。 – Alkarin

0
List<Character> seq1 = new ArrayList<Character>(); 
    List<Character> seq2 = new ArrayList<Character>(); 
    seq1.add('A'); 
    seq1.add('B'); 
    seq1.add('B'); 

    seq2.add('A'); 
    seq2.add('C'); 
    seq2.add('C'); 
    List<Character> tmp1 = new ArrayList<Character>(seq1); 
    List<Character> tmp2 = new ArrayList<Character>(seq2); 

     int start1 = 1, start2 = 1; 
     for(int i = start1; i <= seq1.size()-1; i++){ 
      tmp1.set(i,seq2.get(i)); 
     } 
     for(int i = start2; i <= seq2.size()-1; i++){ 
      tmp2.set(i,seq1.get(i)); 
     } 

    System.out.println(tmp1.toString());  
} 

它的工作原理。

問題是你正在修改list tmp1 and tmp2。所以內容在臨時列表中被修改。

,似乎您試圖打印的不是由你的代碼修改迭代