这是编写此方法的最有效方法吗?

时间:2014-04-10 08:53:28

标签: java performance

新手在这里,我正在编写一种方法来比较两个存储时间的对象。

我写了这个:

public boolean isBefore(TimeType secondTime)
{
    if (_hour < secondTime._hour)
    {
        return true;
    }
    else
    {
        if (_hour == secondTime._hour && _minute < secondTime._minute)
        {
            return true;
        }
        else
        {
            if (_hour==secondTime._hour && _minute == secondTime._minute
                && _second < secondTime._second)
            {
                return true;
            }
        }
    }
    return false;
}

我觉得两次检查_hour == secondTime._hour有点多余,但如果没有它,则该块无效。

因为这是一个三向逻辑树(更大/更小/等于),我在这个问题上找不到任何真正的帮助,我希望能得到你们的帮助。

谢谢!

4 个答案:

答案 0 :(得分:4)

如果速度是最重要的,请将TimeType内部存储为一个整数,计算自定义时间(例如,当天开始)以来的秒数。然后,两个TimeType对象之间的比较将成为单个整数比较。否则,看起来您正在优化不需要优化的代码。

答案 1 :(得分:1)

我不熟悉TimeType(谷歌也找不到它),但我的建议是将TimeTypes转换(如果可能)为毫秒并进行比较。

这将消除嵌套if / else语句的需要。

所以它会变成:

public boolean isBefore(TimeType secondTime) {    
    if(firstTime.toMilis() < secondTime.toMilis()) {
        return true;
    }
    return false;
}

如果TimeType(再次,我找不到它的API)没有自己的方法转换为miliseconds,那么使用静态方法也不是很难。

答案 2 :(得分:0)

我建议删除冗余小时测试:

public boolean isBefore(TimeType secondTime)
{
    if (_hour < secondTime._hour)
    {
        return true;
    }
    else if (_hour == secondTime._hour)
    {
        if (_minute < secondTime._minute)
        {
            return true;
        }
        else
        {
            if (_minute == secondTime._minute
                && _second < secondTime._second)
            {
                return true;
            }
        }
    }
    return false;
}

答案 3 :(得分:0)

添加另一层嵌套if s

public boolean isBefore(TimeType secondTime)
{
    if (_hour < secondTime._hour)
    {
        return true;
    }
    else if (_hour == secondTime._hour)
    {
        if(_minute < secondTime._minute)
        {
            return true;
        }
        else if (_minute == secondTime._minute)
        {
            if(_second < secondTime._second)
            {
                return true;
            }
        }
    }
    return false;
}

如果您不喜欢嵌套,那么您可以替换支票:

public boolean isBefore(TimeType secondTime)
{
    if (_hour < secondTime._hour)
    {
        return true;
    }
    if (_hour > secondTime._hour)
    {
        return false;
    }
    //here _hour == secondTime._hour
    if (_minute < secondTime._minute)
    {
        return true;
    }
    if (_minute > secondTime._minute)
    {
        return false;
    }
    //here _minute == secondTime._minute 
    if (_second < secondTime._second)
    {
        return true;
    }
    if (_second > secondTime._second)
    {
        return false;
    }
    return false;
}