目标结果如下: [A],[A,B],[A,B,C]]
但是当我运行我的代码时,结果是: [[A,B,C],[A,B,C],[A,B,C]]
这是源代码:
public class Try {
ArrayList<String> al=new ArrayList<String>();
List<List<String>> hm=new ArrayList<List<String>>();
public void addal2(){
for(int j=0; j<3;j++){
al.clear();
for(int i=0; i<1;i++){
if(j==0){al.add("a");}
else if(j==1){al.add("a");al.add("b");}
else if(j==2){al.add("a");al.add("b");al.add("c");}
}
hm.add(al);
}
System.out.println("hm final"+hm);
}
public static void main(String[] args) {
// TODO code application logic here
Try c = new Try();
c.addal2();
}
}
请告诉我为什么结果是这样的HM只是添加最后一个元素?
答案 0 :(得分:1)
最后一个元素没有添加到HM中,您要向HM添加对同一列表的引用。
迭代1:HM = [“a”]
迭代2:HM = [[“a”,“b”],[“a”,“b”]]
迭代3:HM = [[“a”,“b”,“c”],[“a”,“b”,“c”],[“a”,“b”,“c”] ]
这很容易解决,而不是清除列表,只需重新实例化。
public static void main(String[] args) throws Exception {
List<List<String>> hm = new ArrayList();
for(int j=0; j<3;j++){
List<String> al = new ArrayList();
for(int i=0; i<1;i++){
if(j==0){al.add("a");}
else if(j==1){al.add("a");al.add("b");}
else if(j==2){al.add("a");al.add("b");al.add("c");}
}
hm.add(al);
}
System.out.println("hm final"+hm);
}
结果:
hm final [[a],[a,b],[a,b,c]]
至于清理代码以使其更简单,您可以尝试以下方法:
public static void main(String[] args) throws Exception {
List<List<String>> hm = new ArrayList();
String alphabet = "abcdefghijklmnopqrstuvwxyz";
// Change the 3 to any number from 1 - 26
for (int i = 0; i < 3; i++) {
List<String> al = new ArrayList();
for (int j = 0; j <= i; j++) {
al.add(String.valueOf(alphabet.charAt(j)));
}
hm.add(al);
}
System.out.println(hm);
}
结果:
[[a],[a,b],[a,b,c]]
答案 1 :(得分:-1)
我发现您的代码无法修复,我会这样做:
public class Main {
private static List<List<String>> addal2(final String... abc) {
final List<List<String>> result = new ArrayList<>();
for (final String x : abc) {
if (result.isEmpty()) {
result.add(Arrays.asList(x));
continue;
}
final List<String> lastList = result.get(result.size() - 1);
final List<String> newLastList = new ArrayList<>();
newLastList.addAll(lastList);
newLastList.add(x);
result.add(newLastList);
}
return result;
}
public static void main(String[] args) {
final List<List<String>> result = addal2("a", "b", "c");
System.out.println(result); // Prints "[[a], [a, b], [a, b, c]]"
}
}