java中ArrayList的add方法值覆盖问题。

zhenchentl 2012-05-03 02:10:31
我用add添加值后,遍历ArrayList里面的值,发现都是最后一个值,前面add进去的都被覆盖掉了,真心不明白,网上说的都是把对象在while循环里面new出来,我也懂,并且确实是这么做的,但是还是不行,不知道为什么,求各位码友帮忙。
代码如下:

ResultSet resultSet=SqlConnector.SqlSearch_result(sqlcom_goods);
ArrayList<GoodDetails_data> gd_arrayList=new ArrayList<GoodDetails_data>();
GoodDetails_data goodDetails_data;
while(resultSet.next())
{
goodDetails_data=new GoodDetails_data();
goodDetails_data.setGoodID(resultSet.getInt("goodsID"));
goodDetails_data.setSalerID(resultSet.getInt("salerID"));
goodDetails_data.setGoodTitle(resultSet.getString("title"));
goodDetails_data.setCategory(resultSet.getString("category"));
goodDetails_data.setPrice(resultSet.getString("price"));
goodDetails_data.setDescible(resultSet.getString("de"));
goodDetails_data.setPic(resultSet.getString("pic"));
// System.out.println("resultset:"+goodDetails_data.getGoodTitle());
gd_arrayList.add(goodDetails_data);
System.out.println("arraylist:"+gd_arrayList.get(0).getGoodTitle());

}

...全文
2346 38 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishaman 2014-12-17
  • 打赏
  • 举报
回复
try {
			in = new FileInputStream("szp_dvd.bin");
			while ((mReadLen = in.read(packet)) != -1) {
				PacketInfo mPacketInfo = new PacketInfo();
				mPacketInfo.len = mReadLen;
				mPacketInfo.data = packet;
				mPacketInfoList.add(mPacketInfo);
			}
		} catch (Exception e1) {
			e1.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

public class PacketInfo {
	public int len;
	public byte[] data = new byte[1024];
}
这样也会背覆盖,蛋疼!
江江梁 2014-10-03
  • 打赏
  • 举报
回复
对,我也遇到同样的问题了,奇葩搞了半天,类里写的static静态变量,当时是全部都一样啊
sonmion 2014-08-02
  • 打赏
  • 举报
回复
把定义对象也放到循环里面
hongmo 2012-06-07
  • 打赏
  • 举报
回复
同问,楼主问题怎么解决的?
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 的回复:]

引用 27 楼 的回复:
大家了,是我的事务,我把GoodDetails_data里的成员变量写成static了,问题找到了。


能把值对象的成员变量定义为 static,你算是立功了!
[/Quote]
额?
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

引用 27 楼 的回复:

引用 24 楼 的回复:

引用 23 楼 的回复:

不是说你忽悠人哈。。。我说被这个忽悠了。。。
Java code
坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

把你 GoodDetails_data函数贴一下吧。不会搞成static成员变……
[/Quote]
类是非static,只是成员变量是static
xiaotoly 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]
引用 27 楼 的回复:

引用 24 楼 的回复:

引用 23 楼 的回复:

不是说你忽悠人哈。。。我说被这个忽悠了。。。
Java code
坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

把你 GoodDetails_data函数贴一下吧。不会搞成static成员变量吧?
……
[/Quote]
??
MiceRice 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 的回复:]
大家了,是我的事务,我把GoodDetails_data里的成员变量写成static了,问题找到了。
[/Quote]

能把值对象的成员变量定义为 static,你算是立功了!
sdojqy1122 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 的回复:]
[/Quote]
惭愧了,你还真能整。。。我想只有那里会出问题。。。
qybao 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 的回复:]

引用 24 楼 的回复:

引用 23 楼 的回复:

不是说你忽悠人哈。。。我说被这个忽悠了。。。
Java code
坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

把你 GoodDetails_data函数贴一下吧。不会搞成static成员变量吧?

神呐!!!我好惭愧,……
[/Quote]

既然有Static定义
GoodDetails_data goodDetails_data; //这里不提示重复定义错误?
qybao 2012-05-03
  • 打赏
  • 举报
回复
怀疑可能是LZ的数据有问题

GoodDetails_data goodDetails_data; //变量在这里定义的,所以不是static是可以肯定的了
while(resultSet.next()) {
...
System.out.println(resultSet.getInt("goodsID"));打印一下结果集的数据看看
}
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]

引用 23 楼 的回复:

不是说你忽悠人哈。。。我说被这个忽悠了。。。
Java code
坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

把你 GoodDetails_data函数贴一下吧。不会搞成static成员变量吧?
[/Quote]
神呐!!!我好惭愧,确实写成static成员变量了。。。。没发觉这个问题,初学java,深感功底太浅,太感谢大家了,是我的事务,我把GoodDetails_data里的成员变量写成static了,问题找到了。
再次膜拜sdojqy1122大神,看问题好犀利!
sdojqy1122 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]

引用 15 楼 的回复:

引用 14 楼 的回复:

[/Quote]
没问题,我笔误,"被" 写成 "别" 了。。。
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 的回复:

坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

哦,还没看明白,结果就出来了。。。
[/Quote]
这是resultset中的next():

next
boolean next()
throws SQLException将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。
当调用 next 方法返回 false 时,光标位于最后一行的后面。任何要求当前行的 ResultSet 方法调用将导致抛出 SQLException。如果结果集的类型是 TYPE_FORWARD_ONLY,则其 JDBC 驱动程序实现对后续 next 调用是返回 false 还是抛出 SQLException 将由供应商指定。

如果对当前行开启了输入流,则调用 next 方法将隐式关闭它。读取新行时,将清除 ResultSet 对象的警告链。


返回:
如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
抛出:
SQLException - 如果发生数据库访问错误或在关闭的结果集上调用此方法

--------------------------------------------------------------------------------
在这里while循环条件用这个不可以吗,有什么问题
sdojqy1122 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
[/Quote]
不是说你忽悠人哈。。。我说被这个忽悠了。。。
坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

把你 GoodDetails_data函数贴一下吧。不会搞成static成员变量吧?
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

Java code

ResultSet resultSet=SqlConnector.SqlSearch_result(sqlcom_goods);
ArrayList<GoodDetails_data> gd_arrayList=new ArrayList<GoodDetails_data>();
GoodDetails_data goodD……
[/Quote]
刚才试了,还是不行。。。
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

引用 20 楼 的回复:

引用 14 楼 的回复:

坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

额,hasnext(),java API里没找到这个发放呢,求指点

是没有,别忽悠了。。。 我看楼主代码没啥问题,除了那个遍历我没看懂。。。你最后遍历的真的一样?表示很怀疑。。……
[/Quote]
这个方法没有怎么用呢。。。。我没有忽悠。。。问题还没解决。
这是遍历:
for (int i = 0; i < gd_arrayList.size(); i++) {
System.out.println("resultsetsecond:"+gd_arrayList.get(i).getGoodTitle());
}

我里面三个数据,这是遍历结果:
resultsetsecond:title3
resultsetsecond:title3
resultsetsecond:title3
sdojqy1122 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

引用 14 楼 的回复:

坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}

额,hasnext(),java API里没找到这个发放呢,求指点
[/Quote]
是没有,别忽悠了。。。 我看楼主代码没啥问题,除了那个遍历我没看懂。。。你最后遍历的真的一样?表示很怀疑。。。因为你后面解释了,差点要问同样的问题了。
zhenchentl 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}
[/Quote]
额,hasnext(),java API里没找到这个发放呢,求指点
qybao 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

坑爹呢!
while(resultSet.next())
{}

应该是
while(resultSet.hasnext()){}
[/Quote]

LZ说对了
循环的问题,循环条件错了,导致数据丢失
加载更多回复(18)
ArrayList.add后,前面数据被覆盖问题多次搜寻,没有讲的很清楚的答案,所有发表本篇文章。 导致这个现象最根本的原因*** * *根源就是ArrayList集合里存的是同一个,有可能是同一个引用或者就是同一个。 *请看下面详解 * *** 下面分情况讲述(逐步添加可能情况,欢迎在讨论区提出)1.涉及循环添加ArrayList list = new ArrayList<

62,634

社区成员

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

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