首页 > 解决方案 > (Java) 在 ArrayList 中的其他两个元素之间添加一个元素

问题描述

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

例如,如果我有[3, 5, 8, 10]并且我想插入数字6,我将如何确定它适合升序排列的位置?

非常感谢

标签: javaarraylist

解决方案


取决于您的需要,您是否需要一个 ArrayList?

#1) 如果您需要排序但编号是否唯一?提供的示例是 (3, 5, 8, 10) 和添加 (6)。如果还有一个 '3',结果应该返回 (3,3,5,6,8,10) 吗?如果不是,为什么不考虑一个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 收藏包

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,它可能是一个更好的解决方案。但一如既往地考虑你的实施。


推荐阅读