list中的值remove或clear掉后遇到了问题

sureme88 2009-08-14 05:26:08
请教大家一个问题:我想把一个单层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>();
}
}
...全文
641 20 打赏 收藏 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
kofalex 2009-08-18
  • 打赏
  • 举报
回复
另外 remove或者clear是不会把你传进去的第一个row_date对象给删掉的最多删里面的值了
你觉得删掉的原因是因为你后面那个row_date根本没有传进去
kofalex 2009-08-18
  • 打赏
  • 举报
回复
你没明白对象是如何传递的 我知道你是想通过1个容器往里面倒数据
你干嘛要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 所以他不支持相同的对象,就会导致你没有传进去。
sureme88 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fzh108 的回复:]
http://blog.csdn.net/huanghr_1/archive/2008/09/21/2958162.aspx
看看这篇文章,再做做试验,也许你会明白其中的道理。。。。


纸上得来终觉浅,绝知此事要躬行
[/Quote]
嗯 是的 我会去做做的
fzh108 2009-08-18
  • 打赏
  • 举报
回复
http://blog.csdn.net/huanghr_1/archive/2008/09/21/2958162.aspx
看看这篇文章,再做做试验,也许你会明白其中的道理。。。。


纸上得来终觉浅,绝知此事要躬行
fzh108 2009-08-18
  • 打赏
  • 举报
回复
楼主对于java里面值传递的问题不是很清楚,建议找本介绍java基础的书籍,基本上都会有这部分的内容。基于楼主提出的问题我给出了一下代码作参考:
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());
}
}
dz007 2009-08-18
  • 打赏
  • 举报
回复
clone是Arrays的静态方法吧
sureme88 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhengbr 的回复:]
你在col_data 里添加了row_data对象,然后把这个row_data对象里的全移除了当然col_data里的row_data也没有了,你如果不想影响就用row_data.clone();方法就没问题了。
[/Quote]
row_data.clone();怎么没找到这个方法?
sureme88 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 enzetianxia 的回复:]
楼主还是没明白java里面值传递的问题。java里面传的是引用,你也可以理解为C或C++里面的指针,当你把row_data做为一个元素添加到col_data里面去,这个时候你操作的数据时被两个引用所指向,任何一个引用对该值进行操作都会影响到另外的一个引用。因此楼主在col_data.add(row_data)之后又做了row_data.romove(row_data)操作,这个时候内存空间里的值已¡­
[/Quote]
所以指向的值都是最后一个吗?
dz007 2009-08-18
  • 打赏
  • 举报
回复
还有我觉得搞col和row有点晕
一般来说数组都是竖着看的,因为Arrays.length返回的是行数

可以把一个List Row 当做行的集合,然后里面的每一行就是List row_data ,这样想比较轻松吧
sureme88 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mouer 的回复:]
有才奇怪呢
[/Quote]
正如我上面更新的,是有的但是不是我想要的结果,col-data中的值都变成了一样的。能说说你的见解吗?
dz007 2009-08-18
  • 打赏
  • 举报
回复
始终就只有过一个row_data
李遒 2009-08-18
  • 打赏
  • 举报
回复
楼主还是没明白java里面值传递的问题。java里面传的是引用,你也可以理解为C或C++里面的指针,当你把row_data做为一个元素添加到col_data里面去,这个时候你操作的数据时被两个引用所指向,任何一个引用对该值进行操作都会影响到另外的一个引用。因此楼主在col_data.add(row_data)之后又做了row_data.romove(row_data)操作,这个时候内存空间里的值已经被你remove掉了,所以col_data里面引用所指向的值也没有了。
sureme88 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zk_2000 的回复:]
List all_data ={"12","45","46","34",,"45","56","78","65","86","73",};
上面这句能编译能过吗?这不是数组吗?可以用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;
    }
[/Quote]
我更新过了
sureme88 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caironghuicxz 的回复:]
不明这么干是干什么
[/Quote]
我是想分成多行多列插入到excel中。上面只是一个简单的概述
sureme88 2009-08-18
  • 打赏
  • 举报
回复
import java.util.ArrayList;
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]
}
}
malligator 2009-08-15
  • 打赏
  • 举报
回复
你NEW一个就对了
 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);
}
caironghuicxz 2009-08-14
  • 打赏
  • 举报
回复
不明这么干是干什么
mouer 2009-08-14
  • 打赏
  • 举报
回复
有才奇怪呢
  • 打赏
  • 举报
回复
List all_data ={"12","45","46","34",,"45","56","78","65","86","73",};
上面这句能编译能过吗?这不是数组吗?可以用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;
}
B1977 2009-08-14
  • 打赏
  • 举报
回复
你在col_data 里添加了row_data对象,然后把这个row_data对象里的全移除了当然col_data里的row_data也没有了,你如果不想影响就用row_data.clone();方法就没问题了。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧