【问题标题】:(Java) Add an element in between two other elements in an ArrayList(Java) 在 ArrayList 中的其他两个元素之间添加一个元素
【发布时间】:2021-08-03 00:46:33
【问题描述】:

这里是 Java 的新手,我想问一下是否有办法在两个元素之间添加一个元素,或者能够将所有元素移动到 ArrayList 的右侧或左侧,以及我如何找出中间.

例如,如果我有 [3, 5, 8, 10] 并且我想插入数字 6,我将如何找出它在升序中的位置?

非常感谢

【问题讨论】:

  • List interfaceadd操作。您不必移动元素,add(...) 会处理这些。

标签: java arraylist


【解决方案1】:

取决于你的需要,你需要一个 ArrayList 吗?

#1) 如果您需要排序但编号是否唯一?提供的示例是 (3, 5, 8, 10) 和添加 (6)。如果还有一个 '3',结果应该返回 (3,3,5,6,8,10) 吗?如果NOT,为什么不考虑NavigableSet/SortedSet,例如TreeSet

import java.util.*;
...
NavigableSet<Integer> navSet = new TreeSet<>(Arrays.asList(new Integer[]{3,5,8,10});
navSet.add(6); //you'll get 3,5,6,8,10
navSet.add(6); //still get 3,5,6,8,10 -- no extra 6

#2) 编号是非唯一的但要订购吗? Apache 为 BAG(组合 Set 和 List)提供了一个集合。 Apache Commmons Collection Bag

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.TreeBag;
...
Bag<Integer> treeBag = new TreeBag<>(Arrays.asList(new Integer[]{3,5,6,8,10});
treeBag.add(6); //you'll get 3,5,6,6,8,10

#3) 否则,如果您真的需要手动编码。添加后总是有一个 Collections 工具可以对其进行排序,例如

import java.util.*;

List<Integer> arrayList = Arrays.asList(new Integer[]{3,5,5,8,10});
List sortedList = arrayList.stream().parallel().sorted()collect(Collectors.toList());
//you'll get (3,5,5,6,8,10), as it gets sorted again.

最后,上面对#2 和#3 的排序总是较慢,因为有一个添加然后重新排序。如果您想要在重建列表时通过搜索进行优化,例如另一个答案中提供的 Stephen P,它可能是一个更好的解决方案。但一如既往地考虑您的实施。

【讨论】:

  • @Basil Borque,谢谢。今天学习了一些关于 NavigableSet 的东西,对编辑很有帮助。
  • 好。我刚刚更改了您的第一个代码示例以捕获NavigableSet 而不是Set。尽管在技术上不是必需的,但它使意图明确,并在进一步编码中需要它们时提供特定于NavigableSet 的各种方法。我将 var 名称从 treeSet 更改为 navSet 以匹配。
  • 对了,我刚才碰巧用NavigableSet写了another Answer。你可能会觉得它很有趣。
  • 直到现在才知道排序集的存在,谢谢大声笑
猜你喜欢
  • 2020-08-12
  • 2018-03-18
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多