簡體   English   中英

ArrayList 二進制搜索

[英]ArrayList BinarySearch

我想在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排名高於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.binarySearch對你來說還不夠好?

好的....

二分查找:

你有一個排序列表。 獲取中間的元素並與有問題的對象進行比較。 如果它低於您要查找的元素,則在列表的部分重復搜索,該部分只有更高的元素。 如果較高,則在列表部分中僅搜索較低的元素。

那么如何進行二分查找呢?

您需要一個度量,它為 2 個對象定義較低的對象和較高的對象。

您的對象必須實現Comparable或者您必須為您的列表定義一個Comparator

然后您需要對列表進行實際排序。 排序將是Collections.sort(myList)

現在 List 有size()方法,它將幫助您確定第一個“中間”元素。

偽代碼:

 **input** : keyElement

 startIndex = 0;
 endIndex = list.size();

 midIndex = (endIndex+startIndex) / 2;
 while(list.get(midIndex) !=  keyElement) {
     if (list.get(midIndex) < keyElement) {
         startIndex = midIndex;
     } else {
         endIndex = midIndex;
     }
     midIndex = (endIndex+startIndex) / 2;
 }

 return midIndex;

沿着這些路線的東西(小心這里的邊界......也許需要+/-1。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM