我在犹豫什么是保存以下数据形式的合适数据结构:
如果我有一个result_number,我可以 -
那么适当的数据结构是什么?
答案 0 :(得分:7)
这听起来像你想要的......
(等等......)
......一个有两个整数和一个字符串的类。
public final class RangeValidation {
private final int minimum;
private final int maximum;
private final String message;
public RangeValidation(int minimum, int maximum, String message) {
if (minimum > maximum) {
throw new IllegalArgumentException("Invalid min/max combination");
}
if (message == null) {
throw new NullPointerException();
}
this.minimum = minimum;
this.maximum = maximum;
this.message = message;
}
// You can tweak this API, of course...
// it could throw an exception instead, or return an empty string for
// success, etc.
public String validate(int value) {
return value < minimum || value > maximum ? mesasge : null;
}
}
当然你可能想让这个实现一个接口以适应更通用的验证框架等......但重要的是你已经整齐地描述了你想要你的类型包含什么 - 所以你只是需要写出来。
另请注意,这会将maximum
值计为包含 - 您可能希望将其设为独占,以便能够表示空范围。 (这确实更难以表示Integer.MAX_VALUE
有效的范围,但......)
答案 1 :(得分:3)
在java中,“数据结构”由带有字段的类表示。该类可能有使用这些字段的方法。
试试这个:
public class MyClass {
private int min;
private int max;
private String message;
public void testNumber(int number) {
if (number >= min && number <= max) {
System.out.println(message);
}
}
}
你应该有一个构造函数来设置字段的值,我建议你创建字段final
。
答案 2 :(得分:1)
如果间隔数较小,请使用包含三个成员class
,min
和max
的{{1}},将其存储在列表中,然后运行线性搜索。
如果间隔数量过大,并且时序要求使线性搜索过高,请创建interval tree,并将消息与其叶节点相关联。
如果间隔不重叠,则可以创建具有两端的间隔类,并使用其左边界在message
中存储间隔对象以比较间隔。有了这个TreeMap
,您可以通过调用您尝试查找的数字上的floorEntry
并检查返回的间隔键是否与您要查找的值重叠来快速找到间隔。