2016-03-23 8 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)); 
     } 

start1を仮定し、そしてstart2は、両方とも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

代わりにあなたのコードによって変更されなかった元のリストを印刷しようとしているようだ - > 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です。したがって、コンテンツは一時リストで変更されます。

、あなたがなぜあなたはSEQ1 `にすべてのリストを追加しない繰り返しの