我正在尝试使用二进制搜索来查找包含子字符串的字符串。

ArrayList<String> ch = new ArrayList<String>();
    ch.add("qwerty");
    ch.add("asdfghjkl");
    ch.add("c");
    ch.add("d");
    ch.add("e");
    Comparator<String> comparator = new Comparator<String>() {
        public int compare(String node1, String node2) {
            if (node1.contains(node2)) {
                return 0;
            }
            return node1.indexOf(node2);
        }
    };


    int pos2 = Collections.binarySearch(ch, "sdf", comparator);


是否可以使用binarysearch而不是循环。这给了我一个错误的索引。

我试图避免使用string.substring(x,y),其中x和y是固定值。

最佳答案

Collections.binarySearch方法用于搜索完全匹配,而不是基于某些子字符串或某些方法的匹配。另外,为了使binarySearch工作,您应该基于要传递给Comparator方法的binarySearch排序数组(尽管这在这里无关紧要,因为它也不起作用)。


  是否可以使用binarysearch而不是循环。


我认为不使用循环就不可能做到这一点。如果您真的担心性能,可以编写自己的二进制搜索实现,该实现将检查contains()而不是相等性。

关于java - Java-比较器搜索子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19410306/

10-10 01:06