Java 我想在对数组排序后向数组中添加一个元素

Java 我想在对数组排序后向数组中添加一个元素,java,collections,Java,Collections,这是我的密码 import java.util.*; public class ArrayExample { public static void main(String[] args) { Integer arr[] = {5,4,3,2,15,8,9}; List<Integer> list = Arrays.asList(arr); Collections.sort(list);

这是我的密码

import java.util.*;

public class ArrayExample {
    public static void main(String[] args) {
        Integer arr[] = {5,4,3,2,15,8,9};
        List<Integer> list = Arrays.asList(arr);            
        Collections.sort(list);
        System.out.println(list);
        list.add(6);// here I am adding 6 to my array.
        System.out.println(list);
        // Here I should get output as [2,3,4,5,6,8,9,15]
    }
}
import java.util.*;
公共类数组示例{
公共静态void main(字符串[]args){
整数arr[]={5,4,3,2,15,8,9};
List=Arrays.asList(arr);
集合。排序(列表);
系统输出打印项次(列表);
list.add(6);//这里我将向数组中添加6。
系统输出打印项次(列表);
//这里我应该得到输出为[2,3,4,5,6,8,9,15]
}
}

如果希望数组保持排序,则必须在每次插入后对其进行排序


但是,使用二进制搜索,您还可以找到项目应该插入的索引i,并使用
list.add(i,6)
将其插入其中。哪个更有效。

您不能,因为此声明:

List<Integer> list = Arrays.asList(arr);
或者您可以简单地使用:

List<Integer> list = new ArrayList<>();//declare the list
for(Integer i : arr){
    list.add(i);//add element by element to the list
}
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
//----------------------------------^------------------^
List List=newarraylist(Arrays.asList(arr));
//----------------------------------^------------------^

否您不能添加,因为您使用的是Arrays.asList(arr)


通过使用两个数组,您可以不使用列表添加元素:源数组
src
和目标数组
dest
。目标数组将比源数组多一个元素。只需将源数组的所有元素复制到目标,然后添加新元素。根据您的帖子标题和帖子正文的不同要求,我添加了两种解决方案:

解决方案1 此解决方案在对数组排序后向数组添加元素,如文章标题中所述。但是请注意,添加的元素位于新数组的尾部

Integer src[] = { 5, 4, 3, 2, 15, 8, 9 };
Integer dest[] = new Integer[src.length + 1];
Arrays.sort(src);
System.out.println(Arrays.toString(src));
// [2, 3, 4, 5, 8, 9, 15]

System.arraycopy(src, 0, dest, 0, src.length);
dest[src.length] = 6;
System.out.println(Arrays.toString(dest));
// [2, 3, 4, 5, 8, 9, 15, 6]
//                        ^
解决方案2 此解决方案在对数组排序之前向数组添加元素。它包含文章正文中代码注释中提到的预期数组

Integer src[] = { 5, 4, 3, 2, 15, 8, 9 };
Integer dest[] = new Integer[src.length + 1];

System.arraycopy(src, 0, dest, 0, src.length);
dest[src.length] = 6;
Arrays.sort(dest);

System.out.println(Arrays.toString(dest));
// [2, 3, 4, 5, 6, 8, 9, 15]
//              ^

另见:

  • 中的排序方法

为什么不在问题中添加解释问题的文本?为什么您希望将6值放在排序位置?排序完成后,您将添加它。@HovercraftFullOfEels,这是在我今天面对的一次采访中被问到的,所以我怀疑我们是否可以添加并期望排序列表。所以您知道您的答案。请再次改进问题。编辑它,问一个诚实的问题来解释你的问题。不要只是在这个网站上发布一个面试问题。如果你愿意的话,你可以把我的一些答案添加到你的答案中。这应该是一个完整的答案。哦,谢谢@ThijsSteel多个想法更好不:)
Integer src[] = { 5, 4, 3, 2, 15, 8, 9 };
Integer dest[] = new Integer[src.length + 1];
Arrays.sort(src);
System.out.println(Arrays.toString(src));
// [2, 3, 4, 5, 8, 9, 15]

System.arraycopy(src, 0, dest, 0, src.length);
dest[src.length] = 6;
System.out.println(Arrays.toString(dest));
// [2, 3, 4, 5, 8, 9, 15, 6]
//                        ^
Integer src[] = { 5, 4, 3, 2, 15, 8, 9 };
Integer dest[] = new Integer[src.length + 1];

System.arraycopy(src, 0, dest, 0, src.length);
dest[src.length] = 6;
Arrays.sort(dest);

System.out.println(Arrays.toString(dest));
// [2, 3, 4, 5, 6, 8, 9, 15]
//              ^