method Arrays.<T#1>binarySearch(T#1[],T#1,Comparator<? super T#1>) is not applicable
时间: 2024-05-10 20:18:22 浏览: 145
这个错误通常发生在尝试使用 `Arrays.binarySearch()` 方法时,传递的比较器与数组元素类型不匹配。这个方法期望传递的比较器是一个与数组元素类型相同或是其父类的比较器。
以下是一个示例代码,用于演示如何使用 `Arrays.binarySearch()` 方法:
```java
// 创建一个包含整数的数组
Integer[] arr = {2, 4, 6, 8, 10};
// 通过 lambda 表达式创建一个比较器
Comparator<Integer> cmp = (a, b) -> a - b;
// 在数组中查找元素 6 的索引位置
int index = Arrays.binarySearch(arr, 6, cmp);
// 输出结果
System.out.println("Index of 6: " + index);
```
在上面的示例中,我们创建了一个包含整数的数组,并使用 lambda 表达式创建了一个比较器。然后,我们使用 `Arrays.binarySearch()` 方法在数组中查找元素 6 的索引位置,并将结果输出到控制台上。
确保传递的比较器与数组元素类型相同或是其父类,就可以避免出现 `Arrays.<T#1>binarySearch(T#1[],T#1,Comparator<? super T#1>) is not applicable` 这个错误。
相关问题
Line 6: error: no suitable method found for sort(int[],<anonymous Comparator<Integer>>) Arrays.sort(nums, new Comparator<Integer>() { ^ method Arrays.<T#1>sort(T#1[],Comparator<? super T#1>) is not applicable (inference variable T#1 has incompatible bounds equality constraints: int lower bounds: Integer,Object) method Arrays.<T#2>sort(T#2[],int,int,Comparator<? super T#2>) is not applicable (cannot infer type-variable(s) T#2 (actual and formal argument lists differ in length)) where T#1,T#2 are type-variables: T#1 extends Object declared in method <T#1>sort(T#1[],Comparator<? super T#1>) T#2 extends Object declared in method <T#2>sort(T#2[],int,int,Comparator<? super T#2>)
这个错误的原因是`Arrays.sort`方法的第二个参数的类型不正确。`Arrays.sort`方法的第二个参数类型应该为`Comparator`,但是当前传入的是一个匿名内部类`new Comparator<Integer>() {...}`。这个匿名内部类的类型是`Comparator<Integer>`,而不是`Comparator`,因此编译器会报错。
要解决这个问题,可以将匿名内部类的类型改为`Comparator`,如下所示:
```java
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
};
Arrays.sort(nums, comparator);
```
这样就可以使用`Comparator`来指定排序规则了。
arrays.binarysearch用法
### 回答1:
Java 中的 `Arrays.binarySearch` 方法用于在有序数组中查找指定元素的索引。如果数组中存在该元素,则返回其索引;如果不存在,则返回负的插入点。插入点是要将该元素插入数组以维护其升序顺序的位置。
语法:
```
public static int binarySearch(int[] a, int key)
public static int binarySearch(long[] a, long key)
public static int binarySearch(float[] a, float key)
public static int binarySearch(double[] a, double key)
public static int binarySearch(Object[] a, Object key)
public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)
```
示例:
```
int[] arr = {2, 4, 6, 8, 10};
int index = Arrays.binarySearch(arr, 6);
System.out.println("Index of 6 is: " + index);
```
输出:
```
Index of 6 is: 2
```
### 回答2:
arrays.binarysearch是Java中的一个数组二分查找方法,用于在已经排序的数组中查找特定的元素。这个方法主要返回目标元素在数组中的位置,如果找到了目标元素,则返回他的索引值,否则返回一个负整数。
这个方法有两个参数,第一个是要查找的数组名,第二个是要查找的目标元素。如果数组中存在目标元素,则返回下标;如果不存在,则返回负数。这个负数的计算方法是-(插入点索引+1),其中插入点索引表示如果要将目标元素插入到数组中,应该插入在哪个位置,因为数组必须有序。
需要注意的是,在使用binarysearch进行查找时,数组必须是有序的,如果数组未排序,那么这个方法的结果是不确定的。此外,如果数组中包含多个等于目标值的元素,则返回的索引值是不确定的,返回哪个索引值是不确定的。
使用binarysearch方法时,通常使用的是Arrays类中的静态方法,调用方法时直接用数组名即可。因此,在使用这个方法时,需要保证使用的是有序的数组,并根据具体情况对返回的索引有所处理。
在Java中,二分查找是一种高效的查询方法,在数据量较大时可以大大提高查询效率。arrays.binarysearch方法就是其中的一种实现,使用方法简单,但需要对数组的有序性有一定的了解才能使用得当。
### 回答3:
Java中提供了一个数组搜索方法arrays.binarySearch(),用于在已排序的数组中搜索指定元素,查找成功返回该元素在数组中的索引位置,查找不成功则返回负数值,表示在数组中不存在该元素。
该方法的使用非常简单,一般需要传递以下两个参数:
1.排序后的数组(必需):使用该方法前需要先将需要查找元素的数组排序,可以使用arrays.sort()方法进行排序,否则该方法将不能正常工作。
2.需要查找的元素(必需):需要查找的元素,可以是任意可比较的数据类型。
除此之外,该方法还支持两个可选的参数:
3.开始查询的索引位置(可选):可以通过该参数指定开始查找的位置,从指定位置开始整个数组将视为一段有序序列。
4.排序后的数组元素的比较器(可选):可以通过该参数指定自定义的比较器,该比较器将用于元素比较而不是使用元素自身的比较方法进行比较。
需要注意的是,在使用该方法时需要保证数组中的元素已经按照一定顺序排列,只有在有序数组中查找才能够保证该算法的正确性。
当查找的元素不存在于数组中时,该方法会返回一个负值,该负值的计算方式为 -(插入点索引 + 1)。插入点指的是将查找的元素插入到有序数组中,在仍然保持有序的情况下仍然能够确保找到该元素的位置。
综上所述,arrays.binarySearch()方法非常适合在有序数组中进行元素的查找,但需要保证数组是有序的。 在进行操作之前要先进行排序,以保证查找的准确性。同时,该方法还支持指定查找的起始位置和自定义比较器,可以满足一些特殊的需求。
阅读全文