如何在函数的子字符串中实现二进制搜索?

问题描述 投票:1回答:1

我在子字符串中实现二进制搜索时遇到问题。在我的City对象中,有一个cityName变量,定义为String。我想输入“ Sha”之类的任何子字符串,它显示“ Sha”的结果。除此之外,还有一个权重变量可对降落的城市名称进行排序。例如,较大的权重值在顶部,并且排序过程基于降序。

我该怎么做?如何将其添加到comparater区域?

这里是我的城市对象

public class City implements Serializable{
    private Integer cityWeight;
    private String cityName;
}

下面是我的代码段。

public static Integer[] searchBySubStringCharacter(List<City> list, String sub) {
        List<Integer> result = new ArrayList<>();

        Comparator<City> comparator = new Comparator<City>() {
            public int compare(City node1, City node2) {
                boolean node1Contains = node1.getCityName().contains(sub);
                boolean node2Contains = node2.getCityName().contains(sub);
                if (node1Contains && !node2Contains) {
                    return 1;
                } else if (!node1Contains && node2Contains ) {
                    return -1;
                } else {
                    return 0;
                }
            }
        };

        Collections.sort(list, comparator);
        for (int i = 0; i < list.size(); i++) {
            int index = Collections.binarySearch(list, new City(sub), comparator);
            if (index >= 0)
                result.add(i);
        }

        return result.stream().toArray(Integer[]::new);
    }
java binary-search
1个回答
1
投票

[binarySearch接受要搜索的键以键入列表中对象的类别,],>

public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

因此在City中传递binarySearch对象,

for (int i = 0; i < list.size(); i++) {
     int index = Collections.binarySearch(list, new City(sub), comparator);
     if (index >= 0)
        result.add(i);
}

此外,如果您使用的是Java8 +,则可以将lambda用于Comparator

Comparator<City> comparator = (node1, node2) -> {
     boolean node1Contains = node1.getCityName().contains(sub);
     boolean node2Contains = node2.getCityName().contains(sub);
     if (node1Contains && !node2Contains) {
        return 1;
     } else if (!node1Contains && node2Contains ) {
        return -1;
     } else {
        return 0;
     }
};

0
投票

[binarySearch接受要搜索的键以键入列表中对象的类别,],>

public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

因此在City中传递binarySearch对象,

for (int i = 0; i < list.size(); i++) {
     int index = Collections.binarySearch(list, new City(sub), comparator);
     if (index >= 0)
        result.add(i);
}

此外,如果您使用的是Java8 +,则可以将lambda用于Comparator

Comparator<City> comparator = (node1, node2) -> {
     boolean node1Contains = node1.getCityName().contains(sub);
     boolean node2Contains = node2.getCityName().contains(sub);
     if (node1Contains && !node2Contains) {
        return 1;
     } else if (!node1Contains && node2Contains ) {
        return -1;
     } else {
        return 0;
     }
};
© www.soinside.com 2019 - 2024. All rights reserved.