List.add()及数据结构存在的逻辑问题

数据结构-List 在集合框架中,List是一个接口,继承自Collection;1. ArrayList是以泛型方式实现的,使用时必须要先实例化2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。 阅读详情

版权声明:本文为博主原创文章,转载请注明出处:https://blog.youkuaiyun.com/qq_41922058

一、问题来源

做项目开发查询所有用户功能时出现的一个严重逻辑错误。

要开发一个带有后台管理用户的功能:

于是先进行数据库数据查询封装进JavaBean添加进数据结构,发现界面展示的数据并不是自己想要的数据,而是最后一条记录的重复数据。

二、问题展示

 查询代码:

public static List<TbUser> queryLogin() {

List<TbUser> list = new ArrayList<TbUser>();

ResultSet rs = findForResultSet("select * from tb_userlist");

TbUser tb = new TbUser();

try {

while(rs.next()) {

String name = rs.getString(1);

String pwd = rs.getString(2);

tb.setName(name);

tb.setPassword(pwd);

System.err.println(tb);

list.add(tb);

//     System.err.println(list); 

}

} catch (SQLException e) {

e.printStackTrace();

}

return list;

}

 

数据库数据

 

三、思路

不断测试发现list是这样变化的

 

1.更改list声明区域

无论将数据结构改为成员变量、局部变量还是更改static,结果还是重复。

显然不是集合区域问题。

2.list.add()原理

List.add(tb);???问题出在这里,list不是添加的对象的本身,而是添加了一个引用。

代码将TbUser对象声明在循环外边,所以引用只有一个,所以这也就不难解释为啥只有最后一条记录的重复。

TbUser tb = new TbUser();

try {

while(rs.next()) {

list.add(tb);

}

} catch (SQLException e) {

e.printStackTrace();

}

四、解决方案

将TbUser对象声明在循环内,每次创建不同的引用。

try {

while(rs.next()) {

TbUser tb = new TbUser();

list.add(tb);

}

} catch (SQLException e) {

e.printStackTrace();

}

 

五、附加

操作mysql数据库极有可能出现写入数据乱码问题。这就需要在连接数据库时声明编码类型,默认编码为ISO-8859-1。

String dbUrl = "jdbc:mysql://127.0.0.1:3306/db_database28?characterEncoding=UTF-8";// 访问MySQL数据库的路径

利用Matlab高效处理Comsol仿真数据的可视化技巧 本文详细介绍了如何将Comsol仿真数据高效导入Matlab并进行专业可视化与后处理。核心内容包括正确的数据导出格式设置、三维矩阵重构方法、二维截面与三维体渲染技巧,以及基于Matlab的定量分析与批处理自动化流程,帮助工程师和科研人员深度挖掘仿真数据价值,提升工作效率。 阅读详情

相关推荐

当兵心理测试软件,当兵心理测试题及答案

心理测试是一种比较先进的测试方法,它是指通过一系列手段,将人的某些心理特征数量化,来衡量个体心理因素水平和个体心理差异差异的一种科学测量方法。小编为你整理了当兵心理测试题及答案,希望对你有所参考帮助。征兵心理测试题(1代表是2代表否)1、我的胃口很好。12、我早上起来的时候,多半觉得睡眠充足,头脑清醒13、我喜欢看报纸上的犯罪新闻。14、有时我常感到困难重重,无法克服。25、我时常遇见一些所谓的专...

weixin_42128393的博客 1万+

java基础教程:集合之ArrayList(28)

java集合之ArrayList。。。快上车!!!

Dream - to be coder 1910

NXP S32K5 MCU如何赋能Zonal架构与软件定义汽车?

汽车电子架构正从分布式ECU向域集中、再向Zonal分区架构演进,核心驱动力在于线束简化、算力下沉与软件分层解耦。区域控制器作为物理区域的“调度员”,需要同时满足实时响应、功能安全、多网络协议转换和OTA升级等要求,这使MCU与SoC的选型成为系统工程的关键决策。MCU凭借确定性的微秒级启动、低功耗、丰富的IO控制以及成熟的ASIL-D认证路径,仍是区域控制器的主流选择。NXP S32K5正是面向这一场景发布的系列MCU:它集成多核锁步、CAN-XL、TSN以太网、硬件安全模块与双Bank Flash,补齐

weixin_28721917的博客 356

将User对象加入到ArrayList中,并且遍历输出

package day14; import java.util.*; @Override     public String toString() {         return "User [name=" + name + ", passWord=" + passWord + "]";     } public class TestUser {     public st

u011414643的专栏 3247

大模型面试题52:LLM如果在训练过程中loss值出现spike应该怎么办?

小白急救:停更→回滚→降LR→裁剪梯度,先保住训练不崩溃;进阶排查:查数据→查优化器→查硬件,找到spike的根因并解决;深层预防:预处理保守配置+训练中实时监控,从源头规避spike。先止损,再溯源,最后预防。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1169

LAMMPS in文件详解:从零开始手把手教你配置金属分子动力学模拟

本文详细解析了LAMMPS in文件的配置方法,手把手教你完成金属分子动力学模拟的全流程。从软件环境准备、势函数选择,到使用Materials Studio构建模型、编写in文件进行能量最小化与系统弛豫,再到实施单轴拉伸生产模拟并提取应力应变数据,最后通过Python和OVITO进行结果分析与可视化,提供了完整的实战指南和常见问题排查技巧。

weixin_28475533的博客 527

mysql list变量_mysql8 参考手册- list_add()函数

将值添加到逗号分隔的值列表中并返回结果。此功能list_drop() 对于处理诸如sql_mode和 optimizer_switch的系统变量的值很有用,这些变量采用逗号分隔的值列表。参量in_list TEXT:要修改的列表。in_add_value TEXT:要添加到列表中的值。返回值一个TEXT值。例mysql> SELECT @@sql_mode;+----------------...

weixin_39882394的博客 993

从‘包饺子’到‘包络线’:一个生活化比喻讲透长期与短期成本决策

本文通过饺子馆经营的生活化比喻,深入浅出地解析了长期与短期成本决策的核心逻辑。从调整人力(可变成本)到扩建厨房(固定成本),揭示了包络线理论在商业决策中的实际应用,帮助企业主在规模经济与成本控制间找到平衡点。

weixin_32006655的博客 338

java8将List<TbUser>进行两层分组

用户demo class TbUser{ private int age; private int sex; } 1.返回值方式一 Map<Integer,<Integer,List<TbUser>>> result = users.stream().collect(Collectors.groupingBy(TbUser::getAge, Collectors.groupingBy(TbUser::getSex))); 2.返回值方式二 Map<Inte

菜鸟阿达 1868

【Cadence】stb仿真和ac仿真——以一个简单的全差分反相放大器仿真为例

最近在补一些仿真方法学的问题,以及一些一直以来都有点模糊的概念,简单记录一下。搭建一个以两个CMOS反相器构成的全差分放大器(28nm工艺,PMOS和NMOS尺寸一致)激励的设置方便共模和差模仿真用同一个TB(这里有一个问题:这个放大器需要在开环下仿真还是闭环下?哪些放大器应用在开环,哪些闭环?这种应用场景不同会导致需要仿真得到开环还是闭环增益,或者环路增益?(我知道放大器在设计的时候肯定都是闭环应用的多,但是什么时候没必要闭环应用?光验证ac和stb仿真是否一样的话有必要有回路吗?

weixin_44951108的博客 5万+

FPGA:UART串口接收(高干扰情况)

在上一篇文章中介绍过UART串口接收模块,其中一个需要优化的方向就是在高干扰情况下,如何实现可靠的UART串口接收任务。

weixin_50164178的博客 1672

MySQL JDBC

 一、连接MySQL数据库 1.  MySQL JDBC四大参数 private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://127.0.0.1:3306/local_test?characterEncoding=UTF-8&amp;useSSL=false...

飞翔的博客 42万+

win x64下安装oracle 12c出现[INS-30131]报错的解决方案

问题:  win x64下安装oracle 12c出现[INS-30131]报错的解决方案 安装oracle11g碰到“无法访问临时位置”的问题,详细信息如下: INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。   操作 - 请确保当前用户具有访问临时位置所需的权限。   附加信息:  - 所有节点上的框架设置检查都失败  

一条道走到黑的GISer 1347

新手写循环必犯:for 循环里用 list.add,内存直接爆了

扩容的过程是:先创建一个新的数组,新数组的容量通常是原来的 1.5 倍(不同版本的 Java 可能会有差异),然后将原来数组中的元素复制到新数组中,最后再将新元素添加到新数组中。比如,当需要处理一个包含大量数据的集合,或者进行多次循环迭代生成数据时,他们会写出类似这样的代码:​。在循环中不断添加这样的元素,无疑会加速内存的消耗。这样,在创建 ArrayList 时就指定了初始容量为 1000 万,刚好可以容纳循环中添加的所有元素,不会触发扩容机制,大大提高了程序的运行效率,同时也减少了内存的消耗。

2503_92849275的博客 5602

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

List在使用中存在的这些问题你都知道吗?

在日常的Java面试中,ArrayList绝对可以算得上是Java后端面试中的一个常客。为此网上也有很多文章来对ArrayList的源码进行分析,其实重点归结下来无非以下几点ArrayList中元素增、删操作的原理;ArrayList中的扩容机制,元素拷贝原理;ArrayList线程安全性以及fast-fail机制等。在面试中可能你对于上述问题可以做到对答如流,但是真正落实到实际开发中你能保证写出没有Bug的代码吗?

z1ztai的博客 996

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

细说 List、顺序表、ArrayList类(附 add 源码解读)—— 数据结构

本篇文章具体探讨 List、顺序表 和 ArrayList 相关概念及常用常用方法,同时对 ArrayList 中 offer 源码进行解读,理解 ArrayList 中的扩容机制,希望能对各位看官朋友有所裨益,如有问题欢迎批评指正

honglan297的博客 853

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

List的remove()方法详解

List的remove()方法详解

anxin_hw的博客 4万+

List集合add方法覆盖原来的内容,使所有内容都一样

List集合add方法覆盖原来的内容问题:今天写了一波逻辑,觉得没问题,list.add(xx)的时候,xx我debug的时候看着数据没问题,但是list.add进去之后发现数据全部都一样解决: 问题:今天写了一波逻辑,觉得没问题,list.add(xx)的时候,xx我debug的时候看着数据没问题,但是list.add进去之后发现数据全部都一样 List<T> tList = new List<T>(); for(int i=0;i<10;i++){ t.num=i;

chelflan's blog 3623

在FOR循环中对LIST循环变量进行REMOVE或ADD操作问题

【问题描述】在FOR循环中对LIST循环变量进行REMOVE或ADD操作问题。 一、案例描述 在循环变量中对LIST对象进行REMOVE或ADD操作,会导致数组长度变更,以致业务逻辑出错。 【原因分析】:我们在删除某个元素后,list的大小发生了变化,这时候你的的索引也会发生变化,这时就会导致你在遍历的时候漏掉某些元素。 比如当你删除第1个元素后,我们如果还是继续根据索引访问第2个元素时,因为删除的关系,后面的元素都往前移动了一位,所以实际访问的是第3个元素。所以这种方式可以用在删除特定的一个元素时使用,但

MJ980629的博客 1269

集合的判断:list == null,list.size() == 0,isEmpty() == true有什么区别和联系?null 和空集合的区别?

本文总结了Java集合判空的正确方法,指出开发中常见的空指针异常问题。作者通过实例演示了三种判断方式:list==null用于判断对象是否实例化,size()==0检查元素数量,isEmpty()本质也是调用size()方法。重点强调必须先进行null判断再检查是否为空,推荐使用if(list!=null&&!list.isEmpty())或if(list!=null&&list.size()>0)的组合判断逻辑,以避免空指针异常。数据库查询结果时,必须进行判空操作。

m0_70325779的博客 2315

List的add方法与addAll方法的区别

1、add是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素 2、addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小 public List getFilePaths(String rootPath){ // todo 实现逻辑

ironhide1994的博客 1万+

stack中add()和push()的区别。

在stack中有自己添加元素的方法push();但是在操作过程中发现,add()同样可以添加元素至stack 那这两个方法有什么不同呢? stack本身没有add()方法,但是继承的类vector有add方法同样vector的父类和实现接口List同样有add()方法。 1.返回值 push()方法返回值描述: Returns:theitem argument 而add()方法的返回值描述: Re...

qq_42770949的博客 2093

关于使用Println()打印List的问题

关于使用println()方法打印List集合的问题,以及部分源码分析

qq_58351353的博客 1807

python add argument list_python链表:TypeError: add() missing 1 required positional argument: 'item'。这个...

展开全部python 2.6用add很正常啊,add看起来没啥问题,到是别的函数有些小问题。1. remove前判断下这个item是不是存在2.if curNode is head : 应该是 if curNode is self._head3._BagIterator(self._head) 是个62616964757a686964616fe59b9ee7ad9431333332616363什么...

weixin_42516668的博客 460

初学数据结构:List与ArrayList介绍

本文介绍了初学数据结构中的List与ArrayList相关知识点,包括ArrayList的构造、使用等

m0_50444008的博客 1147

【数据结构】List与ArrayList

Java List接口与顺序表实现 本文介绍了Java集合框架中的List接口及其实现原理。List是继承自Collection的线性表接口,具备有序元素管理能力。文章首先分析了List接口的定义和核心方法,包括继承自Collection的基础方法和List特有的位置操作方法。 重点介绍了顺序表(数组实现)这一线性表的物理存储结构,并详细演示了如何自定义实现顺序表(MyArrayList)。包括: 异常类设计(空表异常和索引非法异常) 核心成员变量和构造方法 工具方法实现(边界校验、动态扩容) 核心功能实现

记录了从0学习Java技术栈的日常 1250
上一篇: 多线程操作事务及手写连接池
下一篇: CAS服务器SSO模拟登录
JINGXI6
博客等级 码龄9年 54粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值