java尖括号类型匹配

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Deque<TreeNode> queue = new LinkedList<TreeNode>();
        List<List<Integer>> levelListAll = new ArrayList<List<Integer>>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int level_size = queue.size();
            List<Integer> levelList = new ArrayList<Integer>();
            for(int i=0;i<level_size;i++){
                TreeNode node = queue.poll();
                levelList.add(node.val);
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
            }
            levelListAll.add(levelList);
        }
        return levelListAll;
    }
}

遇到了错误Line 19: error: incompatible types: ArrayList<List<Integer>> cannot be converted to List<ArrayList<Integer>> List<ArrayList<Integer>> levelListAll = new ArrayList<List<Integer>>(); ^ Line 34: error: incompatible types: List<Integer> cannot be converted to ArrayList<Integer> levelListAll.add(levelList); ^ Line 36: error: incompatible types: List<ArrayList<Integer>> cannot be converted to List<List<Integer>> return levelListAll; ^ 3 errors

这个错误的原因是使用了 List<ArrayList<Integer>> levelListAll = new ArrayList<List<Integer>>();

而这里本来应该是 List<List<Integer>> levelListAll = new ArrayList<List<Integer>>();

gpt给出的解释是

在这段代码中,问题在于声明的变量类型和初始化的类型不匹配。

声明的变量类型是 List<ArrayList<Integer>>,它声明了一个列表,其中的每个元素都是 ArrayList<Integer> 类型的列表。这意味着你期望使用 ArrayList<Integer> 的列表。

而在初始化时,你试图将其初始化为 new ArrayList<List<Integer>>(). 这个初始化表达式创建了一个 ArrayList<List<Integer>> 类型的对象,其中的每个元素都是 List<Integer> 类型的列表。这与声明的类型不匹配,因为声明的类型期望使用的是 ArrayList<Integer> 类型的列表,而不是 List<Integer> 类型的列表。

正确的声明应该是 List<List<Integer>>,以匹配初始化时使用的类型。

按照我的理解,右边的始终应该比左边具体,右边是ArrayList,左边就应该是List,现在最内层,右边是List,左边是ArrayList,左边比右边具体了,就抽象了。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值