Java ArrayLIst的add()方法覆盖前面所有值

原创 2018年04月16日 10:52:04
前两天在写一个导表工具的时候需要用到ArrayList嵌套集合,可是在用add方法将数据存入集合的时候遇到一些问题:每存入一个值得时候,前面所有的值都被最新值给覆盖掉。
List<ArrayList<string>> bigList = new ArrayList<>();//全局变量
ArrayList<String> rowList = new ArrayList<>();
ResultSet resultSet1 = transferDataDao.DataList(connection,transferData);
while(resultSet1.next()) {
						int devId = resultSet1.getInt("DevId");
//						String dataTime = resultSet1.getString("DataTime");
						values[2] = resultSet1.getString("NowValue");  //特排
						String channelValue = resultSet1.getString("NowValue");
//						System.out.println("特排:" + channelValue);
						if (!channelValue.equals("")) {
							rowList.add(channelValue);
						}
					}

因为rowlist需要多处使用,一开始设置为全局变量,导致每次使用add方法插入的时候,覆盖前面的值。

解决方法:将rowList设置为局部变量即可。

由于这个问题困扰了我好长时间,所以我在解决这个问题的时候,整理了其他两个可能使用ArrayList.add()方法导致覆盖前面值得两种可能,一并整理如下:

1.ArrayList.add方法添加的是对象的引用

解决方法:把实例化对象的语句放在while循环内。如TransferData data = new TransferData();放在while循环内

如果放在while循环外,那么创建的引用只有一个,while循环内一直在改变对象的变量,直到while循环结束,而add方法添加的引用始终是不变的。如果放在while循环内,则相当于每次循环都创建一个对象引用,并指向当次循环的对象,各对象引用指向的对象变量值也是不同的。

2.涉及静态变量

private static String id;
private static String value;
ArrayList<TransferData> list  = new ArrayList<TransferData>();

TransferData data1 = new TransferData("001", "1111");
TransferData data2 = new TransferData("002", "2222");
//如果输出两个对象,发现两个都是data2 
list.add(data1);
list.add(data2);

这种情况虽然每次添加的是不同的对象,但还是被覆盖了。罪魁祸首就是这个static关键字!!!

static关键字:

1.让修饰的属性变为静态

2.该类的所有对象共享同一个属性,所以集合里存的是不同的对象,但属性的值还是同一个。

3.修改其中任何一个,其他的也会被修改。


java ArrayList add()方法数据被覆盖问题

java ArrayList集合添加数据覆盖问题
  • null0420
  • null0420
  • 2017年03月03日 19:22
  • 973

ArrayList add赋值后,前面数据被覆盖的问题

ArrayList myList = new ArraList(); for(.....) { SomeType st = new SomeType; for(.......
  • u010949451
  • u010949451
  • 2016年11月18日 10:55
  • 1076

ArrayList add方法会导致数据覆盖。

ArrayList listData = new ArrayList(); int number = 0; HashMap map = new HashMap(); while (...
  • u013766436
  • u013766436
  • 2016年04月01日 17:08
  • 5123

ArrayList.add()添加一个元素后,会把前面一个元素覆盖

今天写程序时,每次取值均正确,但是不管怎么输出,都是输出最后一次 add 的值,百思不得其解,后来才发现,java的list的 add方法引用的是地址,如果是全局的话,每次引用的值都一样,取的值也就一...
  • u010887744
  • u010887744
  • 2015年08月20日 17:47
  • 5351

Java 使用ArrayList.add() 前面所有值被 覆盖 的问题

ArrayList.add后,前面数据被覆盖的问题多次搜寻,没有讲的很清楚的答案,所有发表本篇文章。 导致这个现象最根本的原因*** * *根源就是ArrayList集合里存的是同一个值,有可能是同一...
  • zouhaipeng
  • zouhaipeng
  • 2016年11月14日 16:14
  • 1044

使用ArrayList.add()时 后面的数据完全覆盖前面的数据

今天在写项目时发现了一个bugquestion = new Question(); question = GetQuestion.GetQuestion(str); list.add(question...
  • sinat_29962405
  • sinat_29962405
  • 2016年04月06日 23:51
  • 594

ArrayList.add后,前面数据被覆盖的问题

1. 代码示例: public class ListTest { public static void main(String[] args) { // TODO Auto-generate...
  • sinat_29581293
  • sinat_29581293
  • 2016年10月18日 20:37
  • 2552

ArrayList的add()方法使用

How to avoid null insertion in ArrayList? 如何避免在ArrayList零插入? Tags: java source 标签: java sour...
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2014年11月25日 23:37
  • 5241

ArrayList add方法

今天在做项目的时候,用了ArrayList数组,然后发现ArrayList的内容居然一样。原来Add方法不恰当使用会覆盖前一个内容的值。在这里记录一下。 ## 错误的做法 ## public void...
  • a511310132
  • a511310132
  • 2017年06月16日 08:52
  • 3632

第十三天:ArrayList的底层add方法原理,按自己理解重写了一下

private int size; private Object[] obj;; //1.5,1.6,ArrayList的构造器默认初始化的时候自动赋值为10 //1.7,1.8都是默认为0...
  • java_wht
  • java_wht
  • 2017年05月21日 18:59
  • 963
收藏助手
不良信息举报
您举报文章:Java ArrayLIst的add()方法覆盖前面所有值
举报原因:
原因补充:

(最多只允许输入30个字)