使用字符串键对自定义对象进行Java二进制搜索

使用字符串键对自定义对象进行Java二进制搜索,java,collections,binary-search,Java,Collections,Binary Search,我有一节课 class User{ String territory; String company; String name; } 我有一个“User”数组列表。我想使用字符串“territory+company”从列表中查找用户对象。查找应基于二进制搜索。我如何实现它 Collections.binarySearch()需要我们创建一个虚拟用户对象。我不想那样。您所需要的就是为您的用户类实现接口。然后,您可以使用Collections.binarySearch()方法(当

我有一节课

class User{
   String territory;
   String company;
   String name;
}
我有一个“User”数组列表。我想使用字符串“territory+company”从列表中查找用户对象。查找应基于二进制搜索。我如何实现它


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

您所需要的就是为您的
用户
类实现接口。然后,您可以使用
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;
        }
    }
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
添加(新用户(“A1”、“B1”、“名称1”);
添加(新用户(“A2”、“B2”、“名称2”);
添加(新用户(“A3”、“B3”、“Name3”);
添加(新用户(“A4”、“B4”、“名称4”);
添加(新用户(“A5”、“B5”、“名称5”);
System.out.println(list.get(Collections.binarySearch(list,新用户(“A4”、“B4”、“Name4”)));
}
静态类用户实现可比较的{
弦域;
弦乐公司;
字符串名;
公共用户(字符串区域、字符串公司、字符串名称){
这个区域=区域;
这个公司=公司;
this.name=名称;
}
@凌驾
公共整数比较(用户o){
返回(地区+公司)。与(地区+公司)相比;
}
@凌驾
公共字符串toString(){
返回地域+”、“+公司+”、“+名称;
}
}

您所需要的就是为您的
用户
类实现接口。然后,您可以使用
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;
        }
    }
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
添加(新用户(“A1”、“B1”、“名称1”);
添加(新用户(“A2”、“B2”、“名称2”);
添加(新用户(“A3”、“B3”、“Name3”);
添加(新用户(“A4”、“B4”、“名称4”);
添加(新用户(“A5”、“B5”、“名称5”);
System.out.println(list.get(Collections.binarySearch(list,新用户(“A4”、“B4”、“Name4”)));
}
静态类用户实现可比较的{
弦域;
弦乐公司;
字符串名;
公共用户(字符串区域、字符串公司、字符串名称){
这个区域=区域;
这个公司=公司;
this.name=名称;
}
@凌驾
公共整数比较(用户o){
返回(地区+公司)。与(地区+公司)相比;
}
@凌驾
公共字符串toString(){
返回地域+”、“+公司+”、“+名称;
}
}

向我们展示您尝试过的内容..可能重复@anoopl我尝试过Collections.binarySearch。但这需要创建一个虚拟对象。我不想那样。告诉我们你试过什么。。可能重复@anoopl我试过Collections.binarySearch。但这需要创建一个虚拟对象。我不希望这样。OP变得更完整:“Collections.binarySearch()需要我们创建一个虚拟用户对象。我不希望这样。”。所以这一个不再回答这个问题。OP变得更加完整:“Collections.binarySearch()需要我们创建一个虚拟用户对象。我不希望这样。”。所以这一个不再回答这个问题。