Kann das keySet () einer SortedMap immer sicher in ein SortedSet umgewandelt werden?

7

Ich habe eine SortedMap , geordnet nach der natürlichen Reihenfolge von seinen Schlüsseln. Kann ich keySet () ohne Risiko auf ein SortedSet übertragen? eine ungültige Cast-Ausnahme.

Das heißt, wird der folgende werfen?

%Vor%

Wenn die Antwort "hängt von der Implementierung von SortedMap" ab, ist dies mindestens sicher für TreeMap ?

    
Andrew Stein 14.09.2012, 15:07
quelle

4 Antworten

12

Für SortedMap im Allgemeinen, nein, da es nicht im Javadoc dokumentiert ist.

TreeMap implementiert jedoch auch NavigableMap , wobei NavigableSet als Schlüsselsatz und NavigableSet extends SortedSet ...

verwendet wird

Was Sie also tun können, ist:

%Vor%     
assylias 14.09.2012, 15:11
quelle
8
%Vor%

Also ist die Antwort nein.

TreeMap.keySet() gibt SortedSet zurück, aber es wird nicht vom Javadoc garantiert.

Die NavigableMap -Schnittstelle, die SortedMap erweitert, hat eine navigableSet() -Methode, die ein NavigableSet rettet, was jedoch SortedSet verlängert.

    
JB Nizet 14.09.2012 15:19
quelle
4

Da die Dokumentation nicht garantiert, dass es ein SortedSet sein wird, auch wenn aktuelle Implementierungen dies so implementieren (und ich habe nicht überprüft, dass dies der Fall ist), tut es das nicht. Ich meine, dass es etwas ist, was man annehmen sollte.

    
Jon Skeet 14.09.2012 15:09
quelle
1

Nein, es ist nicht sicher, da die Dokumentation nicht besagt, dass es ist. Dies sollte jedoch sicher sein:

SortedSet<K> set = new TreeSet<K>(map.keySet());

    
mprivat 14.09.2012 15:14
quelle

Tags und Links