Dlaczego jest list.size()>0
wolniejsza niż list.size()>0
wolniejsza niż list.isEmpty()
w Javie? Innymi słowy, dlaczego isEmpty()
jest lepsze niż size()>0
?Dlaczego metoda list.size()> 0 jest wolniejsza od metody list.isEmpty() w języku Java?
Kiedy patrzę na wdrożenie w ArrayList
, to wygląda prędkości powinny być takie same:
ArrayList.size()
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
ArrayList.isEmpty()
/**
* Returns <tt>true</tt> if this list contains no elements.
*
* @return <tt>true</tt> if this list contains no elements
*/
public boolean isEmpty() {
return size == 0;
}
Jeśli po prostu napiszemy prosty program, aby uzyskać czas obie metody, w tym przypadku size()
, będą we wszystkich przypadkach wymagały więcej isEmpty()
, dlaczego tak jest?
Oto mój kod testowy;
import java.util.List;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
List l=new Vector();
int i=0;
for(i=0;i<10000;i++){
l.add(new Integer(i).toString());
}
System.out.println(i);
Long sTime=System.nanoTime();
l.size();
Long eTime=System.nanoTime();
l.isEmpty();
Long eeTime=System.nanoTime();
System.out.println(eTime-sTime);
System.out.println(eeTime-eTime);
}
}
Tutaj eTime-sTime>eeTime-eTime
we wszystkich przypadkach. Czemu?
@JLR: Tak, akceptuję twój punkt, Nie było wadą, jak testował obie metody w 2 osobnych projektach i oba dają bardzo podobny wynik. Thanx za usunięcie mojej wątpliwości –