オブジェクトの配列でバイナリ検索のコンパレータを作成するのに苦労しています。基本的に、目標は、不規則な配列を検索して、アイテムの最初の一致または最も近い一致を見つけて、挿入ポイントを提供することです。メソッドはジェネリックを渡します (これは変更できません - これは宿題です) が、ジェネリック型の配列を作成することはできません... そのため、私のコンパレーターはエラーをスローしています: "メソッド binarySearch(Object[], Object) in type Arrays は、引数 (Object[]、E、Comparator) には適用されません。」おそらく、一般的な要素「アイテム」をキャストする必要がありますか? わからない。コード:
private Location findFirst(E item) {
Location current;
int closestMatchArray1;
int closestMatchArray2;
Object[] firstItemInArray2 = new Object[numArrayInUse];
Object firstItem;
Comparator<E> comparator = new CompareElement();
for (int i - 0; i < numArrayInUse; i++) {
firstItem = topArray[i];
firstItemInArray2[i] = firstItem;
}
closestMatchArray1 = Arrays.binarySearch(firstItemInArray2, item, comparator);
二次的ですが、関連する質問です。コンパレーターで Comparable メソッド「compareTo」を呼び出して、検索に失敗した場合に項目が配列内にあった場合のおおよその位置を示す負の整数を取得しようとしていますが、やはり問題が発生しています。ジェネリックを使用すると、「メソッドcompareTo(E)はタイプEに対して未定義です」というエラーが発生します。コード:
public class CompareElement implements Comparator<E> {
public int compare(E firstItem, E secondItem) {
return firstItem.compareTo(secondItem);
}
}