在 ArrayList 之间交换元素
Swapping out elements between ArrayLists
我有 2 个 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}
但我的似乎仍以其原始值返回。
非常感谢任何帮助。
在收集的情况下,您不需要任何临时交换变量或其他东西。只需替换值。
for(int i = start1, j = start2; i < seq1.size() && j < seq2.size(); i++, j++){
seq1.set(i, seq2.set(j, seq1.get(i)));
}
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
。因此内容在临时列表中被修改。
而且您似乎正在尝试打印未被您的代码修改的原始列表
我有 2 个 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}
但我的似乎仍以其原始值返回。 非常感谢任何帮助。
在收集的情况下,您不需要任何临时交换变量或其他东西。只需替换值。
for(int i = start1, j = start2; i < seq1.size() && j < seq2.size(); i++, j++){
seq1.set(i, seq2.set(j, seq1.get(i)));
}
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
。因此内容在临时列表中被修改。
而且您似乎正在尝试打印未被您的代码修改的原始列表