ful*_*ead 2 java string collections binary-search
所以我正在搜索一个巨大的ArrayList以查找特定的String值,但是如果我要查找的String与我传入的String相等(不区分大小写),则需要Collections.binarySearch()返回> = 0的值。 binarySearch()方法。
现在,在Collections.binarySearch()的源代码中,它最终将调用以下代码行。
Comparable<? super T> midVal = list.get(mid);
int cmp = midVal.compareTo(key);
Run Code Online (Sandbox Code Playgroud)
如此看来,我无法覆盖String作为其最终值(因此防止我覆盖其compareTo()方法以调用compareToIgnoreCase()),还有其他方法可以实现吗?
任何帮助将非常感谢。
要执行不区分大小写的二进制搜索,请String::compareToIgnoreCase用作比较器:
int i = Collections.binarySearch(list, key, String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
这将比比较减少到相同大小写的两个字符串更快,因为compareToIgnoreCase()逐个比较字符,仅在需要时才减少字符的大小写,如果第一个字符中的字符串不同,则可以快速返回。
注意:要使binarySearch()此比较器正常工作,必须使用完全相同的比较器对集合进行排序:
Collections.sort(list, String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |