java - (Java) 在 ArrayList 中的其他两个元素之间添加一个元素
问题描述
Java 新手,我想问一下是否有办法在两个元素之间添加一个元素,或者能够将所有元素移动到 ArrayList 的右侧或左侧,以及我如何找出中间位置。
例如,如果我有[3, 5, 8, 10]并且我想插入数字6,我将如何确定它适合升序排列的位置?
非常感谢
解决方案
取决于您的需要,您是否需要一个 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,它可能是一个更好的解决方案。但一如既往地考虑你的实施。
推荐阅读
- matlab - 拉盖尔求多根的方法(Matlab)
- react-native - React Navigation poptotop 并在一个动画中移动到下一个屏幕
- azure - Azure DevOps 查询工作项(如果有任何父项正在进行)
- java - 无限期休眠的守护线程的目的
- c# - 如何通过office open xml标准创建/编辑excel
- java - 如何在所有 HttpSecurity 配置器中添加过滤器?
- java - 小米设备在后台运行时启用应用程序弹出窗口的权限
- c++ - 如何使用 C++ 模板推断 const char 字符串的编译时间大小?
- angular - mat-select 值未在路线更改时保存,Angular 8
- rundeck - rundeck 作业可以按顺序执行吗?