在枚举中使用compareTo

时间:2014-12-11 07:05:29

标签: java enums compareto

我看过这段代码,不确定它如何与compareTo一起使用。 有人可以指导我了解它的工作原理吗?

public enum Test
{
    POTATO("Potato"), 
    TOMATO("Tomato"), 
    CARROT("Carrot")

    public String Name;

    private Test(String name) {
        this.Name = name;
    }

    public boolean testFor(Test t)
    {
        if (compareTo(t) <= 0) {
            return true;
        }
        return false;
    }
}

3 个答案:

答案 0 :(得分:5)

枚举值按创建顺序进行比较。因此POTATO小于CARROT,因为POTATO的序数少于CARROT的序数。

一些例子:

Test.POTATO.compareTo(Test.TOMATO); // returns -1, is less
Test.POTATO.compareTo(Test.POTATO); // returns 0, is equal
Test.CARROT.compareTo(Test.POTATO); // returns 2, is bigger

答案 1 :(得分:0)

compareTo Enum 抽象类的最终方法。根据这个docs

compareTo(E o)将此枚举与指定的订单对象进行比较。

答案 2 :(得分:-1)

如果您有兴趣知道这个compareTo方法如何返回值

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}
  • 首先,此算法采用最小字的最小长度
  • 然后它将迭代这个迭代次数,当它找到不匹配的字符时,它将在这些char的Unicode值之间返回不同
  • 如果找不到匹配的char,最后会返回这些字符串长度之间的差异

<强>实施例

"abc".compareTo("abc")  ------>0
"abc".compareTo("bcd")  ------>-1
"abc".compareTo("abccd") ------>-2