Java 为什么只在新的arraylist上添加最后一个元素arraylist
目标结果如下: [a],[a,b],[a,b,c]] 但当我运行代码时,结果是: [a,b,c],[a,b,c],[a,b,c]] 这是源代码:Java 为什么只在新的arraylist上添加最后一个元素arraylist,java,for-loop,arraylist,duplicates,element,Java,For Loop,Arraylist,Duplicates,Element,目标结果如下: [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
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();
}
}
公共类尝试{
ArrayList al=新的ArrayList();
List hm=new ArrayList();
公共无效添加2(){
对于(int j=0;j我发现您的代码实际上无法修复,我会这样做:
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]]"
}
}
公共类主{
私有静态列表addal2(最终字符串…abc){
最终列表结果=新建ArrayList();
for(最终字符串x:abc){
if(result.isEmpty()){
add(Arrays.asList(x));
继续;
}
最终列表lastList=result.get(result.size()-1);
最终列表newLastList=newarraylist();
newLastList.addAll(lastList);
newLastList.add(x);
结果.添加(newLastList);
}
返回结果;
}
公共静态void main(字符串[]args){
最终列表结果=添加2(“a”、“b”、“c”);
System.out.println(结果);//打印“[[a],[a,b],[a,b,c]”
}
}
最后一个元素没有添加到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);
}
publicstaticvoidmain(字符串[]args)引发异常{
List hm=new ArrayList();
对于(int j=0;jp请在您的问题中更具体一点,stackOverflow并不是一个发布半途而废的作业尝试并让我们修复它的地方。您将同一个列表添加三次并更改其内容。与其在循环开始时清除它,不如创建一个新列表。@khelwood我想我可以在每个lo中获得每一个Arraylist alj的op和一次又一次地添加到hm列表中,谢谢
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);
}