我想在排序数组后为我的数组添加一个元素

时间:2017-06-03 15:16:35

标签: 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);
        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]
    }
}

4 个答案:

答案 0 :(得分:1)

你不能因为这个声明:

List<Integer> list = Arrays.asList(arr);

来自documentation

  

Arrays.asList 返回指定数组支持的固定大小列表。 (对返回列表的更改&#34;通过&#34;写入数组。)   此方法充当基于阵列和基于集合的桥梁   API,与Collection.toArray()结合使用。返回的列表是   可序列化并实现RandomAccess。

为此您无法添加到此列表中,即使您尝试删除list.remove(index);这不起作用。

所以要解决您的问题,您可以使用:

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));
//----------------------------------^------------------^

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

不能添加,因为您正在使用Arrays.asList(arr);

 List<Integer> list = Arrays.asList(arr);

asList返回固定大小的列表,一旦列表形成,就不能添加任何元素。 你可能会得到java.lang.UnsupportedOperationException

[2, 3, 4, 5, 8, 9, 15]
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at Test.main(Test.java:14)

答案 3 :(得分:0)

您可以使用2个数组添加元素而不使用列表:源数组src和目标数组dest。目标数组将比源数组多一个元素。您只需将源数组的所有元素复制到目标,然后添加新元素。取决于你的帖子标题的不同要求&amp;你的帖子,我添加了两个解决方案:

解决方案1 ​​

此解决方案为数组添加元素 AFTER 对数组进行排序,如帖子标题中所述。但请注意,添加的元素位于新数组的尾部。

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

此解决方案为数组添加元素 BEFORE 对数组进行排序。它包含在帖子正文中的代码注释中提到的预期数组。

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]
//              ^

另见: