记录一个写程序遇到的bug,java中list.clear问题
我用嵌套集合填充数据时候,发现一个奇怪的地方
list.clear()方法在清理当前集合同时,可能会清理掉我的目标集合。
解决方法,每次填充时候申请一个新的list,不适用list.clear()函数
代码中注解掉的就是之前的方法
此处代码为一个面试题,遍历树结构,并且按照层次输出,注解是胡乱写的,当时为了粘贴方便就没修改,莫当真
import java.util.LinkedList; import java.util.List; import java.util.Scanner; class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> li = new LinkedList<List<Integer>>(); List<List<Integer>> result = new LinkedList<List<Integer>>(); if(root == null) {return result;} //li.add(0); int deep = 0; deep = finddeep(root,deep); System.out.println("test:"+deep); li = finddata(root,deep,li); System.out.println(li); //List<Integer> te = new LinkedList<Integer>(); for (int j = deep; j >= 1; j--) { List<Integer> te = new LinkedList<Integer>(); for (int i = 0; i < li.size(); i++) { if(li.get(i).get(1) == j) { te.add(li.get(i).get(0)); } } result.add(te); //te.clear(); } return result; } private List<List<Integer>> finddata(TreeNode root, int deep, List<List<Integer>> li) { // TODO Auto-generated method stub List<Integer> l = new LinkedList<Integer>(); if(root.left == null & root.right == null) { //deep = deep -1; l.add(root.val); l.add(deep); deep = deep -1; li.add(l); return li; } if(root.left != null & root.right == null) { //左树 //到底了 l.add(root.val); l.add(deep); deep = deep -1; li.add(l); li = finddata(root.left,deep,li); return li; } if(root.left == null & root.right != null) { //左树 //到底了 l.add(root.val); l.add(deep); deep = deep -1; li.add(l); li = finddata(root.right,deep,li); return li; } if(root.left != null & root.right != null) { //左树 //到底了 l.add(root.val); l.add(deep); deep = deep -1; li.add(l); li = finddata(root.left,deep,li); li = finddata(root.right,deep,li); return li; } return null; } private int finddeep(TreeNode root, int deep) { // TODO Auto-generated method stub if(root.left == null & root.right == null) { //到底了 return 1; } if(root.left != null & root.right == null) { //到底了 return finddeep(root.left,deep)+1; } if(root.left == null & root.right != null) { //到底了 return finddeep(root.right,deep)+1; } if(root.left != null & root.right != null) { //到底了 return finddeep(root.left,deep)+1>finddeep(root.right,deep)+1 ? finddeep(root.left,deep)+1:finddeep(root.right,deep)+1; } return 0; //return finddeep(root.right,deep)+1; } public static void main(String[] args) { //Scanner sc = new Scanner(System.in); TreeNode root = new TreeNode(0); TreeNode r1 = new TreeNode(1); TreeNode r2 = new TreeNode(2); TreeNode r3 = new TreeNode(3); TreeNode r4 = new TreeNode(4); TreeNode r5 = new TreeNode(5); TreeNode r6 = new TreeNode(6); root.left = r1; root.right = r2; r2.left = r3; r2.right = r4; r3.left = r5; r3.right = r6; List<List<Integer>> list = new Solution().levelOrder(null); System.out.println(list); } } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构