往List集合循环add(对象)得到的是重复对象

记录每次的错误,强大是慢慢的积累,先看看代码,

往list中循环添加RoleKungFu对象,看似没有问题,结果打印则显示:

  全部是重复的数据!这是因为啥呢,因为将对象add入list中时,放入list中的其实是对象的引用,虽然每次都有重新的set和get,但是实质上是同一个对象,每次都是重新的赋值后覆盖之前的数据,所以循环的都是重复数据,换一句说,new这个关键字是开辟堆内存空间的,上图只new了一次,所以只开辟一块内存空间,这个时候的对象地址是唯一的,所以操作的永远是这块内存上的对象,只是对其的属性赋值并没其他操作,那么解决的办法就很明显了,我可以多"new"几个对象,有了不同的内存地址,操作的就是不同的对象了,所以可以将上图的实例化操作放入循环中,每次循环都重新实例化,效果如下

这样的结果如下:

至此,解决了问题,说句题外话,new是造成耦合性的最大元凶。

原文地址:https://www.cnblogs.com/-qilin/p/11507495.html

时间: 2024-11-10 15:54:04

往List集合循环add(对象)得到的是重复对象的相关文章

java:Set对象TreeSet有序子类,HashSet无序子类,重复对象二

TreeSet有序子类; HashSet无序子类 重复重复元素,Object对象是通过equals和hashCode来进行过滤的. 如果将上一篇提到中的例子中的TreeSet,换成HashSet,那么代码就不会过滤从的对象 HashSet无序子类,如何过滤重复的对象呢?(单个元素是可以过滤,但相同的对象不会) Person: public class Person implements Comparable<Person> { private String name; private int

java 17 - 6 TreeSet集合及其add()方法的源码解析

TreeSet:能够对元素按照某种规则进行排序. 排序有两种方式 A:自然排序 B:比较器排序 TreeSet集合的特点:排序和唯一 1 public class TreeSetDemo { 2 public static void main(String[] args) { 3 // 创建集合对象 4 // 自然顺序进行排序 5 TreeSet<Integer> ts = new TreeSet<Integer>(); 6 7 // 创建元素并添加 8 // 20,18,23,2

绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合

背水一战 Windows 10 之 绑定 通过 Binding 绑定对象 通过 x:Bind 绑定对象 通过 Binding 绑定集合 通过 x:Bind 绑定集合 示例1.演示如何通过 Binding 绑定对象Bind/BindingModel.xaml <Page x:Class="Windows10.Bind.BindingModel" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation

背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 绑定 通过 Binding 绑定对象 通过 x:Bind 绑定对象 通过 Binding 绑定集合 通过 x:Bind 绑定集合 示例1.演示如何通过 Binding 绑定对象Bind/BindingModel.xaml <Page x:Class="Windows10.Bind.BindingModel" xmlns="http://schemas.microsoft.com/winfx/20

list集合去除重复对象的实现

下面小编就为大家带来一篇list集合去除重复对象的实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 对象重复是指对象里面的变量的值都相等,并不定是地址.list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除. 当set集合存储的是对象类型时,需要在对象的实体类里面重写public boolean equals(Object obj) {} 和 public int hashCode() {} 两个方法. public Stri

JSon_零基础_004_将Set集合对象转换为JSon格式的对象字符串,返回给界面

将Set集合对象转换为JSon格式的对象字符串,返回给界面 需要导入的jar包: 编写:servlet: package com.west.webcourse.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import ja

用&lt;forEach&gt;遍历list集合时,提示我找不到对象的属性

<c:forEach items="${list}" var="item"> <tr> <td>${item.UserId}</td> <td>${item.UserName}</td> </tr> </c:forEach> 用<forEach>遍历list集合时,提示我找不到对象的属性.因为他封装的时候 他会主动将第一位改成大写 如果你的是 name 封装好

JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和ArrayList.HashSet.LinkedList等等.根据核心框架图,相信我们都已经对Collection这个JavaSE中最常用API之一有一个较为全面的认识. 这个学习过程,还可以推及到其他常用开源框架和公司项目的学习和熟悉上面.借助开发工具或说明文档,先是对项目整体有一个宏观的认识,再根

转载-------- JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

转载--*--*---- 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区","age":25}//JS