2016-03-23 50 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。所以内容在临时列表中被修改。

,似乎您试图打印的不是由你的代码修改迭代