问题

我想在 Klant 的对象上自己实现一个 BinarySearch 方法,我该怎么做?Klant 有一些变量。

public class Klant {
public String klantID;
private String voornaam;
private String tussenvoegsel;
private String achternaam;
private int leeftijd;
private static boolean MAN = true;
private String plaats;
private String email;
/*
 *  Getters and setters included
 */
}

Klant toevoeging = new Klant("FirstName", "middleName", "\Lastname\"", 20, false, "Location", "[email protected]");
klanten.add(toevoeging);

最佳答案

使用 Collections.binarySearch(...)

当您在列表上运行 Collections.binarySearch(...); 时,该列表中的对象必须是 implement Comparable ,或者您必须将 Comparator 传递给 binarySearch(...) 方法;

以比较器为例,您可以执行以下操作;

class KlantComparator implements Comparator<Klant> {
    @Override
    public int compare(Klant o1, Klant o2) {
        if(condition)
          return 1;
        else if(condition2)
          return 0;
        else
          return -1;
    }
}

在上面比较 Klant 对象 o1o2 ,如果 o1 的排名应该高于 o2 则返回 1,如果它们相同则返回 0,如果 o1 的排名低于 o2 则返回 -1。然后运行二分查找;
    KlantComparator kc = new KlantComparator();
    ArrayList klants = new ArrayList<Klant>();
    Klant o = new Klant();
    klants.add(o);
    klants.add(new Klant());
    klants.add(new Klant());
    Collections.sort(klants, kc);
    Collections.binarySearch(klants, o, kc);

在上面请注意 klants 集合需要先排序 ,并且 binarySearch 需要使用与排序列表相同的 Comparator 执行。

我希望这有帮助。

进一步阅读;
  • Collections API - binarySearch()
  • Comparator API
  • Comparable API
  • 关于java - ArrayList 二进制搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27375711/

    10-11 04:50