第一阵列:{3,5,6,9,12,14,18,20,25,28}
第二个数组:{30,32,34,36,38,40,42,44,46,48}
示例输出:
{3,5,6,9,12,14,18,20,25,28,30,32,34,36,38,40,42,44,46,48}
我必须将第一个数组合并到第二个数组中。第二个数组有空间来容纳所有值
答案 0 :(得分:1)
使用System.arraycopy将a1追加到a2
System.arraycopy(a1, 0, a2, a2_len, a1.length);
然后是Arrays.sort
答案 1 :(得分:1)
每当我知道我需要一个要排序的集合时,我使用的方法会在正确的位置插入新元素,因此当它没有排序时,集合将永远不会有状态...在你的情况下你可能会很好地添加两个到目标集合然后使用Collections.sort()
但你也可以sortedInsert()
...你可以创建你的集合并使用这个方法开始添加所有项目,当你完成后你不需要另一个电话到Collections.sort()
因为集合总是处于排序状态...如果你经常进行单个元素更新并且不希望整个集合被使用,这很方便...这将有更好的性能...
以下是我为List做的事情
/**
* Inserts the value keeping collection sorted, provided collections shall be sorted with provided
* comparator
*/
public static <E> void sortedInsert(List<E> list, E value, Comparator<? super E> comparator) {
assert Ordering.from(comparator).isOrdered(list);
if (list.size() == 0) {
list.add(value);
} else if (comparator.compare(list.get(0), value) > 0) {
list.add(0, value);
} else if (comparator.compare(list.get(list.size() - 1), value) < 0) {
list.add(list.size(), value);
} else {
int i = 0;
while (comparator.compare(list.get(i), value) < 0) {
i++;
}
list.add(i, value);
}
}
答案 2 :(得分:0)
将ArrayList
对象设为arrayListObject
ArrayList<Integer> arrayListObject= new ArrayList<>();
在arrayListObject
执行Collectios.sort(arrayListObject)
对元素进行排序。
使用
Integer list2[] = new Integer[arrayListObject.size()];
list2 = arrayListObject.toArray(list2);
获取结果数组
答案 3 :(得分:0)
使用两个指针/计数器,i
&amp; j
从0开始到数组大小。比较a[i]
&amp; b[j]
并基于结果转换i
或j
(类似于合并排序,合并步骤)。如果不允许额外的空间,那么在最坏的情况下(在输入中是这样,第一个数组中的所有元素都小于第二个数组中的第一个元素),每次比较元素时,可能必须移动第二个数组。 / p>