![](/img/trans.png)
[英]Why i am getting “Remove type arguments” error for “List<String> list1 = new ArrayList<String>();”
[英]I am having ArrayList containing String[], If i add new string[] into list, it also modifed previously added string [] objects
我正在将string []添加到Arraylist中,但是当我尝试从中检索值时,发生了一些错误。 和arraylist的先前值已使用新条目(String [])进行更新预期输出:
第一秒
一二
一二
电流输出
一二
一二一二
下面是代码。
ArrayList<String[]> list = new ArrayList<String[]>();
String[] temp ={"First","Sec"};
list.add(temp);
temp[0] ="1";temp[1]="2";
list.add(temp);
temp[0] ="one";temp[1]="two";
list.add(temp);
printLog(list);
这是打印方法
private void printLog(ArrayList<String[]> result) {
for (int i = 0; i < result.size(); i++) {
Log.d(TAG,"I="+i);
String[] temp = result.get(i);
Log.d(TAG,temp[0]+","+temp[1]+"\n");
}
}
任何建议。
您正在将数组对象的引用添加到列表中。 您每次都需要创建一个新数组。
String[] temp ={"First","Sec"};
list.add(temp);
temp=new String[2];
temp[0] ="1";temp[1]="2";
list.add(temp);
您需要分配一个新的String []数组值,然后再将第二个数组添加到列表中。 现在,您正在覆盖数组中的值,这就是为什么仅出现最后一个值的原因。
似乎您要通过引用传递数组(而不是ArrayList
)。 这意味着,当您有多种访问数据的方式时,它们都指向RAM中的同一位置,这意味着更改似乎在传播。
为了解决此问题,我建议创建一个new String[]
或使用Arrays.copyOf(...)
方法。
这个问题经常被问到。 ArrayList不会复制您添加到其中的对象。 它只是存储了对这些对象的引用。 因此,如果您在执行操作时两次添加同一数组,则列表仅包含对同一数组的两个引用。
您必须为列表的每个元素创建一个新数组。
将列表添加到HashMap时,我遇到了同样的问题。 实际上,当您使用同一功能时,它会添加对该列表/数组的引用。 因此,您需要每次更改String []名称; 为了添加列表。
It seems that Atring array is initialized once but its value is overridden three times.
最初,String [] temp包含{"First","Sec"};
然后通过写入temp[0] ="1"; temp[1]="2";
变成{"1","2"}
temp[0] ="1"; temp[1]="2";
temp[0] ="1"; temp[1]="2";
最终通过写入temp[0] ="one"; temp[1]="two";
成为{"one", "two"}
temp[0] ="one"; temp[1]="two";
temp[0] ="one"; temp[1]="two";
在这种情况下,每次更改同一数组的值。 您需要 每次 初始化 (by writing temp = new String[2];)
该数组 ,以便将其视为与新数组不同的数组
String[] temp ={"First","Sec"};
list.add(temp);
temp = new String[2];
temp[0] ="1";
temp[1]="2";
list.add(temp);
temp = new String[2];
temp[0] ="one";
temp[1]="two";
list.add(temp);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.