关于List集合增强for循环输出的是地址不是存入数据的问题

博客提到在对象中重写toString()方法这一内容,博主表示解决该问题花费了两小时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记得要重写这里的toString 不然输出的就是地址
这里的ArrayList只能存放TestBest对象的数据
最底部存放进TestBest带参数的构造方法里面 最上面的图可以看到
在对象中重写toString()方法即可,哈哈哈我真是个菜鸡,这个问题花了两个小时。

### Java 增强 For 循环报错原因及解决方案 #### 错误原因分析 增强型 `for` 循环(也称为 foreach 循环)是一种简化版的迭代器模式,用于遍历集合或数组中的元素。然而,在某些情况下可能会遇到运行时错误。最常见的问题是 **ConcurrentModificationException** 和 **IndexOutOfBoundsException**。 1. **ConcurrentModificationException**: 当尝试在使用增强型 `for` 循环的过程中修改底层集合结构时会触发此异常[^1]。这是因为增强型 `for` 循环内部依赖于隐式的迭代器来访问集合元素。如果在迭代过程中直接调用了诸如 `add()` 或 `remove()` 方法,则会导致集合的状态发生变化,从而违反了迭代器的预期行为。 2. **IndexOutOfBoundsException**: 这种情况通常发生在操作列表时超出索引范围的情况。例如,在删除某个元素后未正确调整游标位置可能导致后续访问越界的逻辑错误[^3]。 --- #### 解决方案 ##### 针对 ConcurrentModificationException 的解决方法: - 使用显式迭代器并配合其内置的方法完成安全的操作: 显式创建一个 `Iterator` 对象,并利用它的 `remove()` 方法代替直接作用于集合上的移除动作。这样能够确保即使发生了结构性变化也不会破坏当前正在使用的迭代状态。 ```java List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c")); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); if ("b".equals(element)) { // 条件判断 iterator.remove(); // 安全地移除符合条件的项 } } System.out.println(list); // 输出结果为 [a, c] ``` - 替代数据结构:考虑采用支持并发修改的数据类型如 `CopyOnWriteArrayList`,它会在每次写入操作前复制整个底层数组副本,虽然牺牲了一定性能但提供了线程安全性保障。 ##### 处理 IndexOutOfBoundsException 的策略: - 调整循环条件或者重新设计算法流程以防止因动态更新容器大小而导致意外终止; - 如果确实需要边遍历边删减项目数较多的大规模序列化对象建议先收集待清理的目标再统一执行清除命令而不是逐条即时生效。 ```java List<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); // 收集要被移除的对象 List<Integer> toRemove = new ArrayList<>(); for(Integer num : numbers){ if(num % 2 != 0){ toRemove.add(num); } } // 统一移除 numbers.removeAll(toRemove); System.out.println(numbers); // 结果应显示仅保留偶数值 [2] ``` --- ### 总结 为了有效地规避上述提到的各种潜在陷阱,开发人员应当熟悉不同场景下的最佳实践以及各自适用的技术手段。无论是选用更合适的工具还是优化现有代码架构都能显著提升软件系统的稳定性和可维护性水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值