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

Java使用subList截取子列表排序如何不影响原列表

问题根因

Java 中List.subList()方法返回的是原列表的视图,没有生成独立的新列表,所有对子视图的修改都会直接同步到原列表,这就是主列表被同步排序的原因。

解决方法

你只需要把截取到的子列表拷贝到一个新的独立ArrayList中再排序,就不会影响原列表:
把你代码中生成subList的行:

List<Integer> subList = expenditure.subList(i, (d + i + 1));

修改为:

List<Integer> subList = new ArrayList<>(expenditure.subList(i, (d + i + 1)));

修改后subList是独立于原expenditure的新列表,对它做排序操作不会修改原列表的内容。

修改后的完整代码

public static int activityNotifications(List<Integer> expenditure, int d) {
    int n = expenditure.size();
    int count = 0;
    for (int i = 0;i < (n-d-1); i++) {
        // 这里修改为将子列表拷贝到新的ArrayList
        List<Integer> subList = new ArrayList<>(expenditure.subList(i, (d + i + 1)));
        Collections.sort(subList);
        int median = median(subList, d);
        System.out.println("median : " + median + " i: " + i);
        System.out.println("compare to : " + expenditure.get(i + d));
        System.out.println("\n");

        for (int j = 0; j < n; j++) {
            System.out.print(" " + expenditure.get(j));
        }
        if (expenditure.get(i + d) >= median * 2) {
            count ++;
            System.out.println("count: " + count);
        }
    }
    return count;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:04