Java int、int和string的适当数据结构

Java int、int和string的适当数据结构,java,data-structures,Java,Data Structures,我不知道保存以下数据表单的合适数据结构是什么: 整数表示最小值 整数表示最大值 字符串包含一条消息 因此,如果我有一个结果编号,我可以- 检查结果编号是否在最小和最大编号之间 并显示相应的消息 那么什么是合适的数据结构呢?在java中,数据结构由带有字段的类表示。该类可能有使用这些字段的方法 试试这个: public class MyClass { private int min; private int max; private String message;

我不知道保存以下数据表单的合适数据结构是什么:

整数表示最小值 整数表示最大值 字符串包含一条消息 因此,如果我有一个结果编号,我可以-

检查结果编号是否在最小和最大编号之间 并显示相应的消息
那么什么是合适的数据结构呢?

在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);
        }
    } 
}

您可能应该有一个构造函数来设置字段的值,我建议将字段设置为最终值。

在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);
        }
    } 
}

您可能应该有一个构造函数来设置字段的值,我建议将字段设置为最终值。

听起来您希望

等等

。。。具有两个整数和一个字符串的类

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;
    }
}
当然,您可能希望使此实现一个接口,以适应更通用的验证框架等。。。但重要的一点是,您已经清楚地描述了您希望您的类型包含的内容,所以您只需要编写它


还请注意,这将最大值计算为包含-您可能希望将其设置为独占,以便能够表示空范围。这确实使表示Integer.MAX_值有效的范围变得更加困难,尽管…

听起来您想要

等等

。。。具有两个整数和一个字符串的类

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;
    }
}
当然,您可能希望使此实现一个接口,以适应更通用的验证框架等。。。但重要的一点是,您已经清楚地描述了您希望您的类型包含的内容,所以您只需要编写它


还请注意,这将最大值计算为包含-您可能希望将其设置为独占,以便能够表示空范围。这确实使表示Integer.MAX_值有效的范围变得更加困难,尽管…

如果间隔的数量很小,请使用具有三个成员min、MAX和message的类,将它们存储在列表中,然后运行线性搜索


如果间隔的数量过多,并且时间要求使得线性搜索不受欢迎,则创建一个ans,并将消息与其叶节点相关联


如果间隔不重叠,则可以创建具有两端的间隔类,并使用间隔对象的左边界将其存储在树映射中以比较间隔。有了这个树映射,您可以通过调用您试图查找的号码并检查返回的interval键是否与您要查找的值重叠,快速找到一个interval

如果间隔的数量很小,请使用一个包含三个成员min、max和message的类,将它们存储在列表中,然后运行线性搜索


如果间隔的数量过多,并且时间要求使得线性搜索不受欢迎,则创建一个ans,并将消息与其叶节点相关联


如果间隔不重叠,则可以创建具有两端的间隔类,并使用间隔对象的左边界将其存储在树映射中以比较间隔。有了这个树映射,您可以通过调用您试图查找的号码并检查返回的interval键是否与您要查找的值重叠,快速找到一个interval

为什么返回空值?为什么不直接返回一个空字符串?@mynameistococommon:Null更像是一个非值。。。我希望检查返回值是否为null,以表明一切正常,但在我看来,检查空字符串并没有那么好。因为空字符串仍然是字符串,并且更难从调用代码中检测。Null不能是字符串,因此它不能是有效消息。就个人而言,我宁愿看到validate返回一个布尔值,必要时可以为用户检索消息。@SteveKuo:这是一个有争议的问题;根据《有效Java》第二版,我遵循Josh Bloch的指导。这在一定程度上也是出于使用先决条件的习惯。checkNotNull,有效地来自Guava,在工作中。@WaelShowair:嗯,什么?为了说X比Y更有效,你必须对X和Y有一个具体的概念。。。我只想使用集合,因为它们效率高,这不是解决问题的有用方法。为什么返回null?为什么不直接返回一个空字符串?@mynameistococommon:Null更像是一个非值。。。我希望检查返回值是否为null,以表明一切正常,但在我看来,检查空字符串并没有那么好。因为空字符串仍然是字符串,并且更难从调用代码中检测。Null不能是字符串,因此它不能是有效消息。就我个人而言,我宁愿看到validate返回一个布尔值
必要时可以为用户检索消息。@SteveKuo:这是一个有争议的问题;根据《有效Java》第二版,我遵循Josh Bloch的指导。这在一定程度上也是出于使用先决条件的习惯。checkNotNull,有效地来自Guava,在工作中。@WaelShowair:嗯,什么?为了说X比Y更有效,你必须对X和Y有一个具体的概念。。。我只想使用集合,因为它们效率高,这不是解决问题的有用方法。谢谢你的回答,但我实际上在寻找一种现成的java数据结构,如:映射、集合、哈希表等等。有这样的数据结构吗?@WaelShowair有一个相对简单的解决方案,用于不重叠的时间间隔参见我的编辑,但据我所知,一般情况下没有。谢谢你的回答,但实际上我正在寻找一个现成的java数据结构,如:映射、集合、哈希表等等。有这样的数据结构吗?@WaelShowair有一个相对简单的解决方案,用于不重叠的间隔参见我的编辑,但就我所知,一般情况下没有。