【问题标题】:Java binary search of custom objects using String key使用字符串键对自定义对象进行 Java 二进制搜索
【发布时间】:2017-04-30 17:36:38
【问题描述】:

我有课

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

我有一个 'User' 的数组列表。我想使用 String 'territory+company' 从列表中查找用户对象。查找应基于二进制搜索。我该如何实现它?

Collections.binarySearch() 需要我们创建一个虚拟用户对象。我不想那样。

【问题讨论】:

  • 向我们展示您的尝试......
  • @AnoopLL 我已经尝试过 Collections.binarySearch。但这需要创建一个虚拟对象。我不想要那个。

标签: java collections binary-search


【解决方案1】:

您只需为您的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;
        }
    }

【讨论】:

  • OP 变得更加完整:“Collections.binarySearch() 需要我们创建一个虚拟用户对象。我不想要那个。”。所以这个不再回答这个问题了。
  • 你得到答案了吗?我也需要同样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
相关资源
最近更新 更多