【发布时间】:2012-01-16 09:36:01
【问题描述】:
为什么不管strToSearch 变量持有什么,它总是返回49999?即使使用 clank 搜索变量,它也会返回相同的结果。我错过了什么:
String[] arr = new String[100000];
String strToSearch = "12";
for (int i = 0; i < arr.length; i++) {
arr[i] = i+","+i;
}
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1 != null && o2 != null && !o1.isEmpty() && !o2.isEmpty() && o1.indexOf(",") != -1 && o2.indexOf(",") != -1) {
String[] o1Arr = o1.split(",");
String[] o2Arr = o2.split(",");
Integer one = Integer.parseInt(o1Arr[0]);
Integer two = Integer.parseInt(o2Arr[0]);
return one.compareTo(two);
}
return 0;
}
});
System.out.println(Arrays.binarySearch(arr, strToSearch, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1 != null && o2 != null && !o1.isEmpty() && !o2.isEmpty() && o1.indexOf(",") != -1 && o2.indexOf(",") != -1) {
String[] o1Arr = o1.split(",");
String[] o2Arr = o2.split(",");
return o1Arr[0].compareTo(o2Arr[0]);
}
return 0;
}
}));
我的数组包含逗号分隔值,我想根据数组元素中逗号之前的字符串进行搜索。还有其他简单的解决方案吗?我还制作了一个自定义方法,它遍历数组并找到字符串,但我正在寻找一些替代方法。
【问题讨论】:
-
你为什么使用两个不同的比较器?第二个进行字符串比较,因此它将返回与第一个不同的排序。此外,比较器不应该在错误的情况下返回 0(即当值为 null 时),这意味着项目是相等的(我猜这与输出错误有关)。
-
排序时进行整数比较,搜索时进行字符串比较是否正确?看看你的第二个比较器
-
为什么您认为这些替代方法会比您的自定义方法更快?为什么不使用相同的比较器进行排序和搜索?
-
@king_nak:是的,我有 2 个差异比较器。
-
@JBNizet:即使我使用相同的比较器,它也会返回
49999。