我有以下类型的集合:
class Container
{
private String startValue;
private String endValue;
}
假设它包含这些条目......
{"123, "789"},
{"1", "8"},
{"9", "10"},
然后我想让集合给我所有满足每个Container的起始值和结束值之间谓词的条目,例如字符串“5”参数将返回上面的两个第一个条目(但不是最后一个条目)而“9”只会返回第一个(依此类推)。
它应该在VARCHAR列上表现为SQL BETWEEN运算符。
不能从String更改类型。改变数据结构不是问题。
表演在这里也很重要。数据结构很少改变,但检索很常见。如果速度可以获得一点额外的空间也很好。
有什么想法吗?
答案 0 :(得分:2)
将此方法添加到Container
类
public boolean contains(String argument) {
return argument != null && startValue.compareTo(argument) <= 0 && endValue.compareTo(argument) >= 0;
}
然后遍历您的集合,在每个元素上调用contains
。
答案 1 :(得分:1)
您必须使用红黑BST 实施“间隔搜索树”。
http://algs4.cs.princeton.edu/92search/ https://d396qusza40orc.cloudfront.net/algs4partI/slides%2F99GeometricSearch.pdf
查找所有元素的费用为R*logN
,其中R
- 要返回的元素数量,N
- 所有元素的数量。
答案 2 :(得分:1)
嗯......没有整数转换并改变结构......
您可以使用stringToCompare.compareTo(str)来比较字符串。
或者,您可以使用固定数组的字符串,如{“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9” }。因此,您可以拆分字符串startValue和endValue,逐个字符地获取并验证数组中的索引(int)。使用此int值,您可以进行一些比较。