gpt4 book ai didi

java - 通过使用 Java 8 将元素添加到链表中来比较数组列表和链表

转载 作者:行者123 更新时间:2023-11-30 05:36:10 24 4
gpt4 key购买 nike

我正在比较ArrayListLinkedList。例如:

ArrayList => {2,4,5}
LinkedList => 1->3->8->7->6
Final Output => 1->2->3->4->5->8->7->6

我需要将数组列表中的元素与链表中的元素进行比较,并且需要插入,以便使用JAVA 8 Streams/Filter/Map/Collections...(我不知道)
不要改变已经存在的元素的顺序(在上面的例子中8->7->6没有改变顺序)

我尝试使用简单的Core java,通过使用两个for循环来比较并插入到链接列表中

    for(int i=0;i<arrayList.size();i++){
for(int j=0;j<linkedList.size();j++){
if(linkedList.get(j)>arrayList.get(i)){
linkedList.add(j,arrayList.get(i));
break;
}
}
}

我需要使用流、映射、过滤器、集合等在 Java 8 中替换代码

最佳答案

您的任务中有一些奇怪的要求。首先,逻辑可以完全用列表来描述,不需要强制一个列表必须是ArrayList,另一个列表必须是LinkedList

要求对任务使用 Stream API 也没什么用,尤其是对于不适合 Stream API 的任务。

如果 LinkedList 的目的是利用其在任意位置进行廉价插入的能力,那么这将更有意义。这个优势只有在使用迭代器时才能发挥出来,对于LinkedList,所有基于索引的访问方法实际上都会降低性能。

这样的解决方案可能看起来像

// prerequisites
List<Integer> arrayList = new ArrayList<>(Arrays.asList(2,4,5));
List<Integer> linkedList = new LinkedList<>(Arrays.asList(1,3,8,7,6));

// changing linkedList
ListIterator<Integer> iterator = linkedList.listIterator();
for(Integer i: arrayList) {
while(iterator.hasNext()) {
if(iterator.next() > i) {
iterator.previous();
break;
}
}
iterator.add(i);
}

// 1->2->3->4->5->8->7->6
System.out.println(linkedList.stream()
.map(Object::toString).collect(Collectors.joining("->")));

这是针对 LinkedList 量身定制的,因为它可以避免在插入迭代器已链接的位置时多次迭代。

这个逻辑不能用 Stream API 来表达,至少在不违反它的一些规则的情况下是这样。阅读 Non-interferenceStateless behaviors了解更多详情。

关于java - 通过使用 Java 8 将元素添加到链表中来比较数组列表和链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571781/

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