为什么在将新元素插入java数组时采用负索引值?

时间:2017-06-09 02:12:29

标签: java arrays indexing

我正在尝试使用java代码将新元素插入到数组中,我理解除了一行代码之外的大部分程序:" int newindex = -index-1;"。为什么在指数前面使用负号?

这是完整的程序:

public class ArrayManipulation2 {

    public static void main(String[] args) {

        int[] array = {6,3,5,2,-9,-5,-1,0};
        Arrays.sort(array);
        printArray(array);

        int index= Arrays.binarySearch(array, 1);
        int newindex = -index-1;

        array = insertElement(array, 1, newindex);
        printArray(array);
    }


    public static void printArray(int[] array){

        for(int i=0; i<array.length; i++){
            if(i!=0){
                System.out.print(", ");
            }
            System.out.print(array[i]);
        }
        System.out.println();

    }

    public static int[] insertElement(int[] orginal, int element, int index){
        int length = orginal.length;
        int[] destination = new int[length+1];
        System.arraycopy(orginal, 0, destination, 0, index);
        destination[index]=element;
        System.arraycopy(orginal, index, destination, index+1, length-index);

        return destination;

    }
} 

我需要知道为什么新索引被指定为&#34; -index-1&#34; ?.

2 个答案:

答案 0 :(得分:1)

如果项目已经不在数组中,则

Short Format会返回一个负值,以便它可以区分项目在哪里(如果项目在哪里)以及它应该在哪里(如果项目不在哪里)。那里。

代码不正确,不适用于结果为正的情况。

答案 1 :(得分:0)

背景:

方法Arrays.binarySearch()返回

  

搜索关键字的索引,如果它包含在数组中;否则,( - (插入点) - 1)。插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。请注意,当且仅当找到密钥时,这可以保证返回值>> =。

因此,建议在已排序的数组中使用此API,否则可能会返回意外的返回值

然后,让我澄清一下代码: 如果找不到元素,该方法将返回值“( - (插入点) - 1)”,然后得到它的“相反数字”,所以值可以是插入+ 1,然后减去1,我们可以得到它右插入位置