我正在犹豫什么是合适的数据结构来保存以下数据形式:
- 一个整数代表最小数
- 一个整数代表最大数量
- 一个字符串包含一条消息
所以如果我有一个 result_number 我可以 -
- 检查 result_number 是否介于最小值和最大值之间
- 并显示相应的消息
那么什么是合适的数据结构呢?
我正在犹豫什么是合适的数据结构来保存以下数据形式:
所以如果我有一个 result_number 我可以 -
那么什么是合适的数据结构呢?
听起来你想要...
(等等……)
...一个有两个整数和一个字符串的类。
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
有效的范围变得更加困难......)
在 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
。
如果区间数很少,请使用class
具有三个成员(min
、max
和message
)的 a,将它们存储在列表中,然后运行线性搜索。
如果间隔的数量过多,并且时间要求使线性搜索望而却步,则创建一个间隔树,并将消息与其叶节点相关联。
如果区间不重叠,您可以创建一个具有两端的区间类,并将区间对象存储在 a 中,TreeMap
使用它们的左边界来比较区间。有了这个TreeMap
,您可以通过调用floorEntry
您尝试定位的号码并检查返回的间隔键是否与您正在查找的值重叠来快速找到一个间隔。