java - ArrayList BinarySearch

标签 java binary-search

问题

我想自己在 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@email.com");
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 应该被排名则返回 1高于 o2,如果相同则返回 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 对列表进行排序。

我希望这会有所帮助。

进一步阅读;

关于java - ArrayList BinarySearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27375711/

相关文章:

java - 即使网络连接断开,TCP 套接字在发送消息时也不会引发任何异常

c - 在单调递增然后递减的序列cera中找到一个数字

algorithm - 查询以确定点是否位于多边形内

algorithm - 给定数组 A 和 m 个查询

c++ - 为什么我的二进制搜索需要额外的比较? log2(N)+1

java - Camel - unmarshal().serialization() - ClassNotFoundException

java - Hibernate 条件连接表问题

Java - ListIterator 和 hasNext

java - 编译和运行时类

arrays - 在 O(lgn) 中搜索部分排序的数组