You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinkedList声明时传入Comparator编译失败,请求排查问题原因

问题分析与解决

你的代码编译失败主要有几个关键问题,我逐个给你拆解:

1. LinkedList没有接收Comparator的构造方法

Java里的LinkedList类的构造函数并不支持直接传入Comparator作为参数——它的构造选项只有:

  • 空参构造(创建空链表)
  • 接收一个Collection的构造(把集合元素转成链表)

你想通过传入Comparator来让列表保持有序?那找错类了!如果需要自带排序逻辑的有序List,Java标准库没有直接的实现,但你可以用两种方式解决:

  • 方式一:先创建普通LinkedList,之后调用Collections.sort()传入你的Comparator来排序
  • 方式二:如果需要插入时就自动排序,可以考虑用TreeSet(但它是Set,不允许重复),或者自己封装一个基于LinkedList的有序列表逻辑。

2. 代码里的语法错误

除了构造方法的问题,你的代码还有两个小语法错误:

  • @override应该写成@Override(Java注解的O必须大写,否则编译器不识别这是重写注解)
  • 比较逻辑里的arr[1]是笔误!你定义的参数是arr2,这里应该是arr2[0]或者arr2[1](取决于你想比较数组的哪个元素),比如return arr1[0] - arr2[0];,不然编译器会找不到arr这个变量。

修正后的示例代码

如果你只是想创建LinkedList之后排序,代码可以改成这样:

// 先创建空的LinkedList
List<Integer[]> eventLst = new LinkedList<>();
// 先添加一些元素(示例)
eventLst.add(new Integer[]{3, 5});
eventLst.add(new Integer[]{1, 2});
eventLst.add(new Integer[]{2, 4});

// 调用Collections.sort传入自定义Comparator完成排序
Collections.sort(eventLst, new Comparator<Integer[]>() {
    @Override
    public int compare(Integer[] arr1, Integer[] arr2) {
        // 这里假设你想比较数组的第一个元素,可根据需求修改
        return arr1[0] - arr2[0];
    }
});

如果需要插入时就自动维持有序,那可以考虑用TreeSet(注意处理重复元素的逻辑),比如:

// TreeSet接收Comparator,插入时自动排序
Set<Integer[]> eventSet = new TreeSet<>(new Comparator<Integer[]>() {
    @Override
    public int compare(Integer[] arr1, Integer[] arr2) {
        int compareFirst = arr1[0] - arr2[0];
        // 如果第一个元素相同,比较第二个元素,避免TreeSet认为是相同元素而丢弃
        return compareFirst != 0 ? compareFirst : arr1[1] - arr2[1];
    }
});

// 添加元素会自动按规则排序
eventSet.add(new Integer[]{3, 5});
eventSet.add(new Integer[]{1, 2});
eventSet.add(new Integer[]{2, 4});

// 如果需要转成List,直接用LinkedList的构造方法
List<Integer[]> eventLst = new LinkedList<>(eventSet);

内容的提问来源于stack exchange,提问作者Hrushikesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:27:00