[英]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(...);
在列表上,該列表中的對象必須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
對象o1
和o2
,如果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.