gpt4 book ai didi

java - new LinkedList<>(new LinkedList<>()) 和 new LinkedList...的区别,添加

转载 作者:行者123 更新时间:2023-11-30 07:40:48 28 4
gpt4 key购买 nike

更新:感谢所有的回答。我发现的最干净的解决方案是这个:

if ( k<=0 ) return new LinkedList<>(Arrays.asList(new LinkedList<>()));

我有一个递归方法,可以从列表中生成所有“n 选 k”组合。在实现中,我发现两种创建新 LinkedList 实例的方法之间存在奇怪的差异。

public static <T> List<List<T>> extract2(int k, List<T> list) {
if ( k<=0 ) {
// this way fails the test
return new LinkedList<>(new LinkedList<>());
// and this way works fine.
//var v = new LinkedList<List<T>>();
//v.add(new LinkedList<>());
//return v;
}

if ( list.isEmpty())
return new LinkedList<>();

T h = list.get(0);
List<T> tl = new LinkedList<>(list.subList(1, list.size()));

List<List<T>> with_h = extract2(k - 1, tl).stream()
.peek(l -> l.add(0, h)).collect(Collectors.toList());
List<List<T>> without_h = extract2(k, tl);
with_h.addAll(without_h);
return with_h;
}

代码在 LinkedList 的注释掉的初始化中运行良好,但在 new LinkedList(new LinkedList()) 中它失败了。

我是否遇到了某种编译器优化?

这是一个小的 Junit5 测试

        var res = App.extract2(2, Arrays.asList("a", "b", "c", "d"));
assertThat(res, is(Arrays.asList(
Arrays.asList("a", "b"),
Arrays.asList("a", "c"),
Arrays.asList("a", "d"),
Arrays.asList("b", "c"),
Arrays.asList("b", "d"),
Arrays.asList("c", "d")

)));

最佳答案

这里

new LinkedList<>(new LinkedList<>());

您正在使用 LinkedList从参数集合中获取元素并将它们添加到此 LinkedList 的构造函数。这与使用 add() 方法创建一个 LinkedList 并添加一个新的 LinkedList 作为元素完全不同。

关于java - new LinkedList<>(new LinkedList<>()) 和 new LinkedList...的区别,添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028234/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com