私は今日インタビューをしました。私は2つのJavaクラスを与え、登録番号で犬の詳細を検索するように頼んだ。私はJava.util.ArrayList.contains(Object)
を知っていますが、複数のフィールドがある場合の実装方法はわかりません。ArrayListでコンパレータを使用して検索
この例では、最も効率的な検索手法は何ですか?私はCollections.binarySearch
について考えましたが、この例では最も効率的です。もしそうなら、私はそれをどのように実装できますか?
DogSort.java
public class DogSort {
public static void main(String[] args) {
ArrayList<Dog> listDog = new ArrayList<Dog>();
Scanner sc = new Scanner(System.in);
listDog.add(new Dog("Max", "German Shepherd", "33"));
listDog.add(new Dog("Gracie","Rottweiler","11"));
Collections.sort(listDog, Dog.COMPARE_BY_NAME);
System.out.println(listDog);
}
}
Dog.java
class Dog {
private String name;
private String breed;
private String registrationNumber;
public Dog(String name, String breed, String registrationNumber) {
this.name = name;
this.breed = breed;
this.registrationNumber = registrationNumber;
}
public static Comparator<Dog> COMPARE_BY_NAME = new Comparator<Dog>() {
public int compare(Dog one, Dog other) {
return one.name.compareTo(other.name);
}
};
//getter and setter methods for all private variable
}
オーバーライドは、DOGクラスの登録番号の等価性をチェックするメソッドと同等です。 https://stackoverflow.com/questions/8180430/how-to-override-equals-method-in-java –
リストがルックアップフィールドでソートされていない限り、バイナリ検索は使用できません。 – shmosel
@shmoselああ、それは本当です。 – jParmar