containsKey
powinny być bardzo nieznacznie wolniej, ponieważ skutkuje dodatkowym wywołania funkcji (to właśnie nazywa getEntry
) (można go uzyskać zoptymalizowane z dala, nie jestem pewien, czy Java zrobić). containsKey
wygląda następująco:
public boolean containsKey(Object key) {
return getEntry(key) != null;
}
Należy jednak pamiętać, że containsKey
mógłby natomiast być bardzo nieznacznie szybciej innych Map
wdrożeń (ale prawdopodobnie nie tych w standardowym API Java).
Ogólnie moje implementacje wyglądać następująco: (unikając potrzeby containsKey
)
int[] arr = map.get(100);
if (arr == null) // doesn't exist
// do stuff
else // exists
// do stuff with arr
Poniższa byłoby zdecydowanie być wolniejsze niż powyżej: (jeżeli rzeczy zwracać uwagę istnieć odpowiednią ilość czasu)
if (!map.containsKey(100)) // doesn't exist
// do stuff
else // exists
{
int[] arr = map.get(100);
// do stuff with arr
}
Edit: Dzięki zvzdhk za dostarczenie źródła containsKey
. Powinienem był to sprawdzić.
Dlaczego go nie przetestujesz? – rekire
Zrobiłem, ale daje to cały czas różne czasy wykonania, które są w pewnym przedziale i mniej więcej tym samym. Nie mam pojęcia, co jest naprawdę szybsze. –