Java基础----ArrayList中的clear方法以及ArrayList对象

Posted zhang-yi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础----ArrayList中的clear方法以及ArrayList对象相关的知识,希望对你有一定的参考价值。

今天在做Leetcode 102. 二叉树的层序遍历 时, 不管怎么试,每一层的输出都为空,如下图:

技术图片

 

上述结果所使用的代码如下。

 1     public List<List<Integer>> levelOrder(TreeNode root) {
 2         if(root == null) return null;
 3         List<List<Integer>> res = new ArrayList<>();
 4         Queue<TreeNode> queue = new LinkedList<>();
 5         queue.add(root);
 6         TreeNode dummy = new TreeNode(Integer.MIN_VALUE);
 7         queue.add(dummy);
 8         ArrayList<Integer> level = new ArrayList<>();
 9         while(!queue.isEmpty()){
10             TreeNode temp = queue.poll();
11             if(temp.val == dummy.val) {
12                 res.add(level);
13                 System.out.println(level);
14                 level.clear();
15                 if(!queue.isEmpty()) {
16                     queue.offer(dummy);
17                 }
18             }else{
19                 level.add(temp.val);
20                 if(temp.left != null) {
21                     queue.offer(temp.left);
22                 }
23                 if(temp.right != null) {
24                     queue.offer(temp.right);
25                 }
26             }
27         }
28         return res;
29     }

后来经过检查,用来存每一层元素的level,只在进入循环之前创建了一次,因此其地址值不变,如果将其加入到res中,当一层遍历结束加入到res之后,接着又执行了level.clear()方法,该clear方法每一次都把level中的元素清空,所以产生了每层输出都为空的结果,经过以上分析之后,把代码做出如下修改:

 1 public List<List<Integer>> levelOrder(TreeNode root) {
 2     if(root == null) return null;
 3     List<List<Integer>> res = new ArrayList<>();
 4     Queue<TreeNode> queue = new LinkedList<>();
 5     queue.add(root);
 6     TreeNode dummy = new TreeNode(Integer.MIN_VALUE);
 7     queue.add(dummy);
 8     ArrayList<Integer> level = new ArrayList<>();
 9     while(!queue.isEmpty()){
10         TreeNode temp = queue.poll();
11         if(temp.val == dummy.val) {
12             res.add(level);
13             level = new ArrayList<>();
14             if(!queue.isEmpty()) {
15                 queue.offer(dummy);
16             }
17         }else{
18             level.add(temp.val);
19             if(temp.left != null) {
20                 queue.offer(temp.left);
21             }
22             if(temp.right != null) {
23                 queue.offer(temp.right);
24             }
25         }
26     }
27     return res;
28 }

 

修改完了之后,还是有点疑惑,然后去知乎搜了一下,看到了大神的解答https://www.zhihu.com/question/31203609

以上是关于Java基础----ArrayList中的clear方法以及ArrayList对象的主要内容,如果未能解决你的问题,请参考以下文章

Java基础(44):ArrayList使用详解

Java基础练习题10--[使用ArrayList获取10个随机数;String类型的ArrayList集合,去除ArrayList中的重复元素,模拟注册,登录存入集合]

java基础之ArrayList方法

Java基础系列:了解ArrayList

Java基础复习

JAVA中的ArrayList构造