请教大家一个问题:我想把一个单层list变成一个list套list的 我想这样做的,结果遇到了一个问题,当我把row_data中的值remove或clear掉后,col_data中的值也跟这没有了。有人知道这是怎么回事吗?有什么好的解决方法?目前我想到的就是重新new一个。 List all_data ={"12","45","46","34",,"45","56","78","65","86","73",};
String onedata = "";
List<String> row_data = new ArrayList<String>();
List<List<String>> col_data = new ArrayList<List<String>>();
for (int i = 0; i < 6; i++) {
onedata = all_data.get(i);
row_data.add(onedata);
if(row_data.size()%5==0){
col_data.add(row_data);
row_data.removeAll(row_data);
// row_data=new ArrayList<String>();
}
}
String onedata = "";
List<String> row_data = new ArrayList<String>();
List<List<String>> col_data = new ArrayList<List<String>>();
for (int i = 0; i < 6; i++) {
onedata = all_data.get(i);
row_data.add(onedata);
if(row_data.size()%5==0){
col_data.add(row_data);
row_data.removeAll(row_data);
// row_data=new ArrayList<String>();
}
}
上面这句能编译能过吗?这不是数组吗?可以用List?
ArrayList中的remove或clear都是删除引用,怎么可能会没呢。
楼主好好查查自己的程序,现在贴出来的程序是根本没法运行的。
ArrayList中的源码如下。
/**
* Removes all of the elements from this list. The list will
* be empty after this call returns.
*/
public void clear() {
modCount++; // Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null; size = 0;
}
List all_data ={"12","45","46","34",,"45","56","78","65","86","73",};
List <String> row_data = null;
List <List <String>> col_data = new ArrayList <List <String>>();
for (int i = 0; i < 6; i++) {
String onedata = all_data.get(i);
if(row_data == null || row_data.size()==5){
row_data=new ArrayList <String>();
col_data.add(row_data);
}
row_data.add(onedata);
}
import java.util.List;public class Test {
public static void main(String[] args) { List <String> all_data = new ArrayList <String>();
all_data.add("33");
all_data.add("23");
all_data.add("573");
all_data.add("88");
all_data.add("7d");
all_data.add("d3");
all_data.add("23");
all_data.add("f73");
all_data.add("8g");
all_data.add("7f7");
all_data.add("3f");
all_data.add("23");
all_data.add("f73");
all_data.add("8f8");
all_data.add("7g");
all_data.add("888");
String onedata = "";
List <String> row_data = new ArrayList <String>();
List <List <String>> col_data = new ArrayList <List <String>>();
for (int i = 0; i < all_data.size(); i++) {
onedata = all_data.get(i);
row_data.add(onedata);
if(row_data.size()%3==0){
col_data.add(row_data);
row_data.removeAll(row_data);
// row_data=new ArrayList <String>();
}
}System.out.println("col_data中的值是:"+col_data.get(0));//col_data中的值是:[888],而预想的是 col_data中的值是:[33, 23, 573]
}
}
一般来说数组都是竖着看的,因为Arrays.length返回的是行数可以把一个List Row 当做行的集合,然后里面的每一行就是List row_data ,这样想比较轻松吧
public static void main(String[] args) {
String[] all_data = { "33", "23", "573", "88", "7d", "d3", "23", "f73", "8g", "7f7", "3f", "23", "f73", "8f8",
"7g", "888" };
List<List<String>> col_data = new ArrayList<List<String>>();
int maxCol = 3;
int maxRow = all_data.length % maxCol == 0 ? all_data.length / maxCol : (all_data.length / maxCol + 1);
for (int row = 1, index = 0, maxIndex = all_data.length; row <= maxRow; row++) {
List<String> row_data = new ArrayList<String>();
for (int col = 1; col <= maxCol && index < maxIndex; col++, index++) {
row_data.add(all_data[index]);
}
col_data.add(row_data);
}
for (int i = 0; i < col_data.size(); i++) {
System.out.println(col_data.get(i).toString());
}
}
看看这篇文章,再做做试验,也许你会明白其中的道理。
纸上得来终觉浅,绝知此事要躬行
你干嘛要remove呢?你吧row_date传进去了,然后传第2个就应该再new一下row_data 这样它就指向一个新的list对象 老的row_date作为一个list对象已经在里面了 如果你没有new的情况下把他remove了这时row_date这个变量同你col_date里的那个list指向的是同一个list,就会把里面那个数据给清空,另一方面 这时你再次放数据到这个row_data 然后再用col_data.add(row_data),这时因为是arraylist 所以他不支持相同的对象,就会导致你没有传进去。
你觉得删掉的原因是因为你后面那个row_date根本没有传进去