使用前缀字符串我需要使用BinarySearch显示ArrayList中所有可能的字符串。是否有可能告诉我怀特的方式。
BinarySearch(myList, SearchString);
答案 0 :(得分:1)
每个String
prefix
和非空String
suffix
适用prefix < prefix+suffix
。
因此,您可以使用Collections.<String>binarySearch(List<String>,String)
来搜索 prefix
的位置。当然,前缀的存在与否并未说明prefix+suffix
String
s的存在与否。因此,如果索引是否定的,请使用-index-1
转换它并检查该位置是否等于列表的大小(在这种情况下没有找到前缀String
)或者String
at该索引具有前缀。如果索引不是负数,即找不到没有后缀的 prefix
,则必须决定是否包含带有空后缀的String
s。由于binarySearch
将在多次出现的情况下返回任意索引,因此您必须使用返回的索引线性地转换到第一个匹配项,无论是向后还是向前,具体取决于您是否 prefix
< / em>不包括后缀。
获得第一个位置后,您可以再次使用binarySearch
通过搜索大于任何前缀{{1}的最小String
来查找所有前缀String
的结尾}}。可以通过将前缀的最后一个字符加1来构造此String
。在这里,String
是否真的存在并不重要,它只是为我们提供了前缀String
范围的分隔符。因此,您将使用String
转换负值,并且第一个索引为-index-1
,不带前缀;如果没有这样的String
,它将是列表的大小。
String