![]() |
1
3
这应该起作用:
然而,排序和二进制搜索比单次迭代效率低。 附录:
这里的问题是find()方法与您的“匹配”逻辑无关;它只找到一个满足谓词的元素。因此,您可以传递不同的谓词实现,例如,它可以检查'endsWith'以find()方法,并返回以特定字符串结尾的find项。此外,find()方法适用于任何类型的集合;它只需要一个将集合元素类型的元素转换为布尔值的谓词。围绕一个简单逻辑的多行代码也显示了Java缺乏对第一类函数的支持。 |
![]() |
2
1
问题是二进制搜索从不回头。 |
![]() |
3
1
我认为从性能的角度来看,你现在这样做实际上是最好的方式。排序本身可能比简单地遍历未排序的列表更昂贵。但是要确定的是,您必须运行一些测试(尽管由于JIT编译,这听起来不像那么容易)。 你要找的标准总是从“开始”开始吗?因为在你的问题中你说的是正则表达式。
|
![]() |
4
1
排序列表本身要比线性扫描列表花费更多的时间(基于比较的排序所需时间与 哪里 n 即使列表在大多数情况下是完全排序的 ,排序算法必须至少遍历列表才能检查这一点。 基本上,无论您如何实现排序算法,算法(即使在最佳情况下) . 因此,线性搜索“concat”可能是最好的选择。 更详细的解决方案是对包含字符串的列表进行子类化,并维护“concat”第一次出现的索引。 假设字符串是不可变的,您所要做的就是重写add、remove等,并相应地更新索引。 |
![]() |
5
1
|