(Java) 在 ArrayList 的两个其他元素之间添加一个元素
(Java) Add an element in between two other elements in an ArrayList
这里是 Java 的新人,我想问一下是否有办法在两个元素之间添加一个元素,或者能够将所有元素移动到 ArrayList 的右侧或左侧,以及如何我可以找出中间点。
例如,如果我有 [3, 5, 8, 10] 并且我想 插入 数字 6,我如何找出它适合升序排列的位置?
非常感谢
看你的需要,你需要一个ArrayList吗?
#1) 如果需要排序但编号是否唯一?提供的示例是 (3, 5, 8, 10) 并添加 (6)。如果还有一个'3',结果应该return(3,3,5,6,8,10)吗?如果不是,为什么不考虑NavigableSet
/SortedSet
such as 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 util 对其进行排序,例如
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,这可能是更好的解决方案。但一如既往地考虑您的实施。
这里是 Java 的新人,我想问一下是否有办法在两个元素之间添加一个元素,或者能够将所有元素移动到 ArrayList 的右侧或左侧,以及如何我可以找出中间点。
例如,如果我有 [3, 5, 8, 10] 并且我想 插入 数字 6,我如何找出它适合升序排列的位置?
非常感谢
看你的需要,你需要一个ArrayList吗?
#1) 如果需要排序但编号是否唯一?提供的示例是 (3, 5, 8, 10) 并添加 (6)。如果还有一个'3',结果应该return(3,3,5,6,8,10)吗?如果不是,为什么不考虑NavigableSet
/SortedSet
such as 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 util 对其进行排序,例如
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,这可能是更好的解决方案。但一如既往地考虑您的实施。