当向List中add()时,size()正常递增,但加进去的元素却都是一样的重复着。注意了,很有可能是你加入得元素是某个bean,且这个bean被你在调用的类中定义成域成员,并实例化了。这时候你再循环改变bean里的内容add()到list中,那么根据java的对象存的是地址的原理,你的list里全是那个实例化bean的地址,最后元素值就全都一样,并且取的是最后一次改变的值。 解决办法是bean被你在调用的类中定义成域成员时不要实例化,到循环内部再实例化,这样就保证了每一个add到list里的对象都是new出来的。
举例说明吧!
错误代码:
public class UserSupplierAction extends ActionSupport implements Preparable {
public Suppl suppl = new Suppl(); // 标记1
public List<Suppl> suppList = new ArrayList<Suppl>();
......
public String selectSuppliers() throws Exception {
for(Supplier sup:supplierList){
// 标记2
suppl.setId(sup.getId());
suppl.setName(sup.getName());
if(null != supplierids && !"".equals(supplierids)) {
String[] supids = supplierids.split(",");
for(String supid:supids){
if(sup.getId().equals(supid.toString())){
suppl.setFlag(1);
break;
}
}
}
suppList.add(suppl);
//注意 红色的地方 这样的结果就是suppList里都是重复的元素
改正代码就是将 标记1 处的改为 public Suppl suppl;
标记2处加个 suppl = new Suppl();
--------------------------------------------------------- end ------------------------------------------------------
相关推荐
### 删除文本文件中重复行(vb.net) #### 知识点概述 本文将详细介绍如何使用VB.NET编程语言来实现从文本文件中删除重复行的功能。该功能主要涉及到以下几个关键概念和技术点: 1. **文件读取与写入**: VB.NET中...
1. **List接口**:List是Java集合框架中的一个接口,它继承了Collection接口,规定了元素有序且可以有重复。常见的List实现类有ArrayList、LinkedList等。 2. **ArrayList类**:ArrayList是基于数组实现的List,...
在网页开发中,防止用户意外或恶意重复提交数据是一个重要的考虑因素。这可能导致数据库中的冗余数据,甚至可能对服务器造成不必要的压力。本篇文章将详细探讨如何使用JavaScript来控制页面的重复提交,确保每个表单...
这一步操作可以有效地过滤掉重复元素,因为重复的键会被新的值覆盖,但最终只保留一个版本。 3. **获取键集合**:接下来,我们从`HashMap`中获取所有键的集合,这些键实际上就是不重复的元素。 4. **转换为列表**...
Python中的四种基础数据结构是列表(list)、元组(tuple)、字典(dict)和集合(set),它们各自有独特的特性和用途。 1. **列表(List)**: - 列表是可变的数据结构,这意味着你可以修改其中的元素或添加/删除元素。 - ...
当我们直接将新的键值对put到Map中时,由于键的重复,原有的值会被新的值覆盖,导致最终Map只保留了最后一个添加的键值对。 二、解决办法 针对这个问题,有两种常见的解决策略: 1. 自定义HashMap类 你可以创建一...
当List集合中存在重复的key时,使用Collectors.toMap()方法将抛出Duplicate key异常。解决方法有三种: 1. 重复时用后面的value 覆盖前面的value ```java Map, String> map = list.stream().collect(Collectors.to...
这意味着一旦将重复的元素添加到Set集合中,原有的元素会被新添加的元素覆盖。 - **列表(List)**:List集合则与Set相反,它不仅允许存储重复元素,而且能够保证元素的插入顺序。这意味着开发者可以通过索引直接访问...
List 的元素有放入顺序,元素可重复,而 Set 的元素无放入顺序,元素不可重复,重复元素会覆盖掉。Set 的元素虽然无放入顺序,但是元素在 Set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的。加入 Set ...
List的特点是元素有放入顺序,元素可重复,而Set的特点是元素无放入顺序,元素不可重复,重复元素会覆盖掉。需要注意的是,虽然Set元素无放入顺序,但元素在Set中的位置是由其hashCode决定的,因此元素的位置其实是...
举个例子,当两个线程在同一个位置添加数据,后面添加的数据就有可能覆盖前面添加的数据。此外,在扩容时,多个线程可能同时触发扩容操作,导致最终容量不一致。在JDK 1.7版本中,如果扩容操作开始后一个新元素插入...
`ArrayList` 是 `List` 接口的一个实现类,它使用动态数组的方式存储数据。`ArrayList` 的特点是能够根据索引快速地访问列表中的元素,同时也支持通过索引进行元素的增删操作。 **代码示例分析:** ```java @Test ...
当向`HashSet`中添加元素时,实际上是在`HashMap`中插入键值对。由于`HashMap`不允许键重复,因此`HashSet`能够保证元素的唯一性。此外,`HashSet`利用对象的`hashCode()`和`equals()`方法来判断元素是否重复。 ###...
`distinctRepresentatives.cpp`可能涉及到了算法,用于在一组数据中找出不重复的代表元素,这可能用到了集合操作、排序或哈希技术。 5. **多项式加法(Add Polynomials)**: `addPolynomials.cpp`可能包含对...
此处将`list2`复制到`list`,并覆盖`list`原有的元素。 ```java Collections.swap(list, 2, 1); ``` 交换`list`中索引为1和2的元素位置。 #### 4. EventObject `EventObject`是事件处理模型的基础类,用于表示特定...
Java面试中的核心知识点主要集中在数据结构、集合框架和并发安全等方面。在阿里云Java实习生面试中,面试官可能会考察以下几个方面: 1. **HashSet保证不重复的原理**: HashSet利用HashMap来存储元素,其中元素...
Java集合框架中的List接口是Java编程中非常重要的一部分,它代表了一种有序的、允许元素重复的集合。List接口扩展了Collection接口,并提供了对元素位置的精确访问和操作。本文将深入探讨List接口及其子类,特别是...
- 例如,当两个线程尝试在同一位置添加数据时,可能会出现一个线程覆盖另一个线程添加的数据的情况。这种情况在JDK 1.7中尤其明显,因为JDK 1.7中使用链表解决哈希冲突,而JDK 1.8中使用链表或红黑树解决冲突,且在...
在给定的`removeDuplicate`方法中,我们首先将`List`转换为`HashSet`,这会自动去除重复元素。然后清空原始`List`,并将其填充回`HashSet`的内容。这种方法的效率更高,因为它依赖于`HashSet`内部的高效哈希算法。...