是否可以将SortedMap的keySet()安全地转换为SortedSet?

And*_*ein 8 java collections

我有一个SortedMap,根据其键的自然顺序排序.我可以安全地将其keySet()强制转换为SortedSet,而不会冒无效的强制转换异常.

也就是说,下面会抛出什么?

SortedMap<K, V> map = ...;
SortedSet<K> set = (SortedSet<K>) map.keySet();
Run Code Online (Sandbox Code Playgroud)

如果答案是"取决于SortedMap的实现",那么这对TreeMap来说至少是安全的吗?

ass*_*ias 15

对于SortedMap一般,没有因为它不是在Javadoc文档.

但是,TreeMap也实现了NavigableMap,它使用NavigableSet一个键集并NavigableSet扩展SortedSet...

所以你能做的是:

NavigableMap<K, V> map = ...; //can be a TreeMap or a ConcurrentSkipListMap
SortedSet<K> set = map.navigableKeySet();
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 8

SortedMap<String, String> treeMap = new TreeMap<String, String>();
// prints true
System.out.println(treeMap.keySet() instanceof SortedSet);   
// prints false
System.out.println(Collections.synchronizedSortedMap(treeMap).keySet() instanceof SortedSet); 
Run Code Online (Sandbox Code Playgroud)

所以答案是否定的.

TreeMap.keySet()返回a SortedSet,但javadoc无法保证.

NavigableMap接口,其延伸SortedMap,有一个navigableSet()方法,该方法returs一个NavigableSet,它扩展SortedSet,虽然.