2016-12-15 21 views
0

自定義對象我有一個類的Java二進制搜索使用String鍵

class User{ 
    String territory; 
    String company; 
    String name; 
} 

我有「用戶」的ArrayList。我想使用String'territory + company'從列表中查找一個User對象。查找應基於二進制搜索。我怎麼能實現它?

Collections.binarySearch()需要我們創建一個虛擬用戶對象。我不想那樣。

+1

告訴我們您已經嘗試的.. –

+1

的可能的複製[實施對象二進制搜索(http://stackoverflow.com/questions/901944/實現二進制搜索對象) – ar4ers

+0

@AnoopLL我試過了Collections.binarySearch。但是這需要創建一個虛擬對象。我不想那樣。 – Vivek

回答

0

您所需要的只是爲User類實現Comparable接口。然後,您可以使用Collections.binarySearch()方法(僅當您的列表按課程排序時)。

類似的東西會爲你工作:

public static void main(String[] args) { 
     List <User> list = new ArrayList<>(); 
     list.add(new User("A1", "B1", "Name1")); 
     list.add(new User("A2", "B2", "Name2")); 
     list.add(new User("A3", "B3", "Name3")); 
     list.add(new User("A4", "B4", "Name4")); 
     list.add(new User("A5", "B5", "Name5")); 

     System.out.println(list.get(Collections.binarySearch(list, new User("A4", "B4", "Name4")))); 
    } 


    static class User implements Comparable <User>{ 
     String territory; 
     String company; 
     String name; 

     public User(String territory, String company, String name) { 
      this.territory = territory; 
      this.company = company; 
      this.name = name; 
     } 

     @Override 
     public int compareTo(User o) { 
      return (territory+company).compareTo(o.territory+o.company); 
     } 

     @Override 
     public String toString(){ 
      return territory + "," + company + "," + name; 
     } 
    }