因此,我正在一个巨大的 ArrayList 中搜索特定的 String 值,但如果我正在查找的 String 与我传递给的 String 相等(不区分大小写),我需要 Collections.binarySearch() 返回一个 >=0 的值二进制搜索()方法。
现在,在 Collections.binarySearch() 的源代码中,它最终调用以下代码行。
Comparable<? super T> midVal = list.get(mid);
int cmp = midVal.compareTo(key);
因此,我无法重写 String 作为它的final(因此阻止我重写它的compareTo() 方法来调用compareToIgnoreCase() ),还有其他我可以实现这一点吗?
任何帮助将非常感谢。
要执行不区分大小写的二分搜索,请使用String::compareToIgnoreCase
作为比较器:
int i = Collections.binarySearch(list, key, String::compareToIgnoreCase);
这比比较两个简化为相同大小写的字符串执行得更快,因为compareToIgnoreCase()
逐个比较字符,仅在需要时减少字符的大小写,这样如果第一个字符中的字符串不同,则可以快速返回。
NB:使binarySearch()
随着这个比较器正常工作,收集必须使用完全相同的比较器进行排序:
Collections.sort(list, String::compareToIgnoreCase);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)