关于数组的一些问题

Huy*_*han 5 java arrays

我有两个关于Java中的数组的问题,希望你能抽出时间来帮助我.

问题1:

int[] intArray1 = { 1, 4, 2, 5, 6, 7, 2 };  
int[] intArray2 = { 1, 4, 2, 5, 6, 7, 2 };

intArray1.equals(intArray2);
Run Code Online (Sandbox Code Playgroud)

但它返回错误?

问题2:

我运行这段代码:

int[] intArray1 = { 1, 4, 2, 5, 6, 7, 2 };  //2 is duplicated
Arrays.binarySearch(intArray1,2);
Run Code Online (Sandbox Code Playgroud)

它返回-2.

但是当我删除重复时:

int[] intArray3 = { 1, 4, 2, 5, 6, 7}; // nothing is duplicated
Arrays.binarySearch(intArray1,2);
Run Code Online (Sandbox Code Playgroud)

现在它返回2,这是正确的.

我不知道数组中的二进制搜索如何处理导致-2的重复?

Ted*_*opp 7

关于问题1:数组继承了equals()from 的默认实现,仅当两个对象相同时才Object返回true.您可以使用以下方法测试数组内容是否相等:

Arrays.equals(intArray1, intArray2);
Run Code Online (Sandbox Code Playgroud)

关于问题2:除非对数组进行排序,否则二进制搜索会返回不可预测(通常是错误的)结果.它碰巧在特定的未排序数组上工作是巧合.


ton*_*nio 5

在未排序的数组上调用binarySearch时,通常会得到奇怪的结果.它在javadoc中是明确的:

使用二进制搜索算法在指定的int数组中搜索指定的值.在进行此调用之前,必须对数组进行排序(如上面的排序方法).如果未排序,则结果未定义.如果数组包含具有指定值的多个元素,则无法保证找到哪个元素.

该equals回报率false,因为它应该:您创建了两个不同的阵列,并equals告诉你两个数组是不同的,但事件的内容是相似的.Arrays.equals实现您打算使用的结构比较.