2014-11-08 3 views
0

getTime() метод сравнивает Unix время дат. Я не знаю, как работает метод compareTo(). Какой из них лучше (быстрее) и почему?Какой способ проверить, совпадают ли даты, лучше?

Date date1 = ... 
Date date2 = ... 

//METHOD 1 
if(date1.getTime() == date2.getTime()) { 
... 
} 

//METHOD 2 
if(date1.compareTo(date2) == 0) { 
... 
} 
+0

Возможный дубликат http://stackoverflow.com/questions/1551235/java-strings-compareto-vs-equals –

+1

Я думаю, что в вашем случае это не имеет никакого значения. Сравнение двух длин - достаточно простая операция, доступная практически для всех процессоров, которые в настоящее время используются на планете. Я бы ожидал, что вариант == немного быстрее, так как compareTo также пытается вычислить вид (un |) равенства (-1,0,1). Но помните, что ранняя оптимизация - это корень всего зла. ;-) – Oncaphillis

ответ

2

Первый метод использует один сравнение, второй метод использует в среднем 3 сравнений (2 из CompareTo и 1 из кода)

Позволяет видеть источники

public int compareTo(Date date) { 
    if (milliseconds < date.milliseconds) { 
     return -1; 
    } 
    if (milliseconds == date.milliseconds) { 
     return 0; 
    } 
    return 1; 
} 
0

Помещение: вы написали, что метод getTime() сравнивает Unix times of date ". Это неверно, так как эта функция возвращает количество времени как целое число. Следовательно, вы можете положиться на первый метод, это просто численное сравнение. Вы не найдете ничего быстрее, чем это:

if(date1.getTime() == date2.getTime()) { 
    ... 
} 
+0

Я не писал, что getTime() сравнивает все. Я писал, что этот метод с использованием getTime() сравнивает Unix-времена. – micnyk

+0

Да, вы сделали это буквально. Метод getTime() сравнивает время Unix дат ». – TheUnexpected

+0

Нет, я этого не делал. Я имел в виду метод как способ сделать это, а не как функцию класса Date. – micnyk

Смежные вопросы