Para lub para zapewnia wygodny sposób obsługi prostych powiązań klucz-wartość, co jest szczególnie przydatne, gdy chcemy zwrócić dwie wartości z metody. JDK zawiera klasy wewnętrzne: AbstractMap.SimpleEntry oraz AbstractMap.SimpleImmutableEntry
1. SimpleEntry jest zdefiniowany w klasie abstrakcyjnej AbstractMap, a jego metoda konstrukcyjna jest podobna do tej w Pair.
2. Klasa AbstractMap zawiera również klasę zagnieżdżoną, która reprezentuje niezmienną parę: klasę SimpleImmutableEntry.
/** * Wpis utrzymujący niezmienny klucz i wartość. Ta klasa * nie obsługuje metody <tt>setValue</tt>. Ta klasa może być * wygodne w metodach zwracających bezwątkowe migawki * odwzorowania klucz-wartość. * * @since 1,6 */ publiczna klasa statyczna SimpleImmutableEntry<K,V> implements Entry<K,V>, java.io.Serializable { prywatny statyczny final long serialVersionUID = 7138329143949025153L;
prywatny końcowy K; prywatna ostateczna wartość V;
/** * Tworzy wpis reprezentujący odwzorowanie z określonego * klucz do określonej wartości. * * @param klucz jest kluczem reprezentowanym przez ten wpis * @param wartość wartość reprezentowaną przez ten wpis */ public SimpleImmutableEntry(K key, wartość V) { this.key = klucz; this.value = value; }
/** * Tworzy wpis reprezentujący to samo odwzorowanie co * określony wpis. * * @param wpis wpis do kopiowania */ public SimpleImmutableEntry(Entry<? rozszerza K, ? rozszerza V> entry) { this.key = entry.getKey(); this.value = entry.getValue(); }
/** * Zwraca klucz odpowiadający temu wpisowi. * * @return klucz odpowiadający temu wpisowi */ public K getKey() { return; }
/** * Zwraca wartość odpowiadającą temu wpisowi. * * @return wartość odpowiadającą temu wpisowi */ public V getValue() { wartość zwrotu; }
/** * Zastępuje wartość odpowiadającą temu wpisowi określoną * wartość (operacja opcjonalna). Ta implementacja po prostu rzuca * <tt>UnsupportedOperationException</tt>, jak implementuje ta klasa * <i>niezmienny</i> wpis na mapie. * * @param wartość nowej wartości do przechowywania w tym wpisie * @return (Nie wraca) * @throws UnsupportedOperationException zawsze */ public V setValue(V value) { throw new UnsupportedOperationException(); }
/** * Porównuje określony obiekt z tym wpisem dla równości. * Zwraca {@codeprawdziwe} jeśli dany obiekt jest również elementem odwzorowania i * oba wpisy reprezentują to samo odwzorowanie. Formalniej mówiąc, dwa * elementy {@code e1} i {@code e2} reprezentują to samo odwzorowanie *jeśli<pre> * (e1.getKey()==null ? * e2.getKey()==null : * e1.getKey().equals(e2.getKey())) * && * (e1.getValue()==null ? * e2.getValue()==null : * e1.getValue().equals(e2.getValue()))</pre> * To zapewnia, że metoda {@code równa się} działa poprawnie w całej przestrzeni * różne implementacje interfejsu {@code Map.Entry}. * * @param obiekt do porównania dla równości z tym wpisem na mapie * @return {@code prawdziwe} jeśli określony obiekt jest równy temu odwzorowaniu *wpis * @see #hashCode */ publiczny boolean równy się(Obiekt o) { if (!( o instancji Map.Entry)) return false; Map.Entry<?,?> e = (Map.Entry<?,?>)o; return eq(key, e.getKey()) & eq(value, e.getValue()); }
/** * Zwraca wartość kodu skrótu dla tego wpisu mapy. Kod skrótu * elementu odwzorowania {@code e} definiuje się jako: <pre> * (e.getKey()==null ? 0 : e.getKey().hashCode()) ^ * (e.getValue()==null ? 0 : e.getValue().hashCode())</pre> * To zapewnia, że {@code e1.równa się(e2)} implikuje, że * {@code e1.hashCode()==e2.hashCode()} dla dowolnych dwóch wpisów * {@code e1} i {@code e2}, zgodnie z wymaganiami ogólnych * kontrakt {@linkObject#hashCode}. * * @return wartość kodu skrótu dla tego wpisu mapy * @see #equals */ public int hashCode() { return (key == null ? 0 : key.hashCode()) ^ (value == null ? 0 : value.hashCode()); }
/** * Zwraca reprezentację ciągu tego wpisu mapy. Ten * implementacja zwraca reprezentację ciągu tego * klucz do wpisu, a następnie znak równy ("<tt>=</tt>") * po czym następuje reprezentacja ciągu wartości tego wpisu. * * @return reprezentacja ciągu tego wpisu na mapie */ public String toString() { klucz return + "=" + wartość; }
} SimpleImmutableEntry rzuca java.lang, jeśli próbuje zmodyfikować wartość, wywołując metodę setValue.NieobsługiwanaOperacjaExceptionNienormalny.
Kod:
|