我正在尝试使用二进制搜索来查找包含子字符串的字符串。
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/