/**
* Returns the empty map (immutable). This map is serializable.
*
* <p>This example illustrates the type-safe way to obtain an empty set:
* <pre>
* Map<String, Date> s = Collections.emptyMap();
* </pre>
* Implementation note: Implementations of this method need not
* create a separate <tt>Map</tt> object for each call. Using this
* method is likely to have comparable cost to using the like-named
* field. (Unlike this method, the field does not provide type safety.)
*
* @see #EMPTY_MAP
* @since 1.5
*/
@SuppressWarnings("unchecked")
public static final <K,V> Map<K,V> emptyMap() {
return (Map<K,V>) EMPTY_MAP;
}
Powyższa funkcja zwraca niezmienną pustą mapę.Dlaczego mamy niezmienną pustą mapę?
public static final Map EMPTY_MAP = new EmptyMap<>();
klasa EmptyMap jest następujący
/**
* @serial include
*/
private static class EmptyMap<K,V>
extends AbstractMap<K,V>
implements Serializable
{
private static final long serialVersionUID = 6428348081105594320L;
public int size() {return 0;}
public boolean isEmpty() {return true;}
public boolean containsKey(Object key) {return false;}
public boolean containsValue(Object value) {return false;}
public V get(Object key) {return null;}
public Set<K> keySet() {return emptySet();}
public Collection<V> values() {return emptySet();}
public Set<Map.Entry<K,V>> entrySet() {return emptySet();}
public boolean equals(Object o) {
return (o instanceof Map) && ((Map<?,?>)o).isEmpty();
}
public int hashCode() {return 0;}
// Preserves singleton property
private Object readResolve() {
return EMPTY_MAP;
}
}
Jaki jest pożytek z takiej klasy i metody użytkowego? Próbowałem
Map myMap = Collections.emptyMap();
myMap.put("Name","John");
i dostaję Exception in thread "main" java.lang.UnsupportedOperationException
ponieważ kolekcja jest niezmienna nie obsługuje modyfikacji. Więc jaki jest pożytek z takiej struktury danych?
Nie jestem pewien ... ale domyślam się, że jest to pomocne w czymś takim jak wzór obiektu zerowego. Zamiast zwracania zerowego odwołania z metody można zwrócić pustą mapę. – Asha
prawdopodobny duplikat [Collections.emptyMap() vs nowy HashMap()] (http://stackoverflow.com/questions/14846920/collections-emptymap-vs-new-hashmap) – assylias