gpt4 book ai didi

java - 让 Collections.binarySearch() 与 CompareToIgnoreCase 一起使用?

转载 作者:行者123 更新时间:2023-12-03 02:32:02 27 4
gpt4 key购买 nike

所以我正在一个巨大的ArrayList中搜索特定的字符串值,但是如果我正在查找的字符串与字符串I相等(不区分大小写),我需要Collections.binarySearch()返回一个> = 0的值传入binarySearch()方法。

现在在 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() 逐一比较字符,仅在需要时减少字符的大小写,这样可以在字符串满足以下条件时快速返回第一个字符不同。

注意:要使带有此比较器的 binarySearch() 正常工作,集合必须使用完全相同的比较器进行排序:

Collections.sort(list, String::compareToIgnoreCase);

关于java - 让 Collections.binarySearch() 与 CompareToIgnoreCase 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com