使用String参数查找字符串范围

时间:2013-11-18 17:02:17

标签: java

我有以下类型的集合:

class Container
{
   private String startValue;
   private String endValue;
}

假设它包含这些条目......

{"123, "789"},
{"1", "8"},
{"9", "10"},

然后我想让集合给我所有满足每个Container的起始值和结束值之间谓词的条目,例如字符串“5”参数将返回上面的两个第一个条目(但不是最后一个条目)而“9”只会返回第一个(依此类推)。

它应该在VARCHAR列上表现为SQL BETWEEN运算符。

不能从String更改类型。改变数据结构不是问题。

表演在这里也很重要。数据结构很少改变,但检索很常见。如果速度可以获得一点额外的空间也很好。

有什么想法吗?

3 个答案:

答案 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值,您可以进行一些比较。