来自NavigableMap的java文档:firstKey() of Navigable map
返回与此映射中的最小键关联的键 - 值映射,如果映射为空,则返回null。
然而,当我运行以下程序时,我得到NoSuchElementException
public class Test1 {
public static void main(String a[]) {
NavigableMap<Object, Object> map = new TreeMap<>();
Object obj = map.firstKey();
}
}
我不确定我是否遗漏了一些东西,请告诉我为什么会这样?
答案 0 :(得分:3)
正如firstKey()
函数的文档所述:
/** * Returns the first (lowest) key currently in this map. * * @return the first (lowest) key currently in this map * @throws NoSuchElementException if this map is empty */ K firstKey();
所以在你的情况下,地图是空的,因此是例外
如果您查看该方法的TreeMap
实施,那么您会看到:
/**
* @throws NoSuchElementException {@inheritDoc}
*/
public K firstKey() {
return key(getFirstEntry());
}
getFirstEntry
如果是空集,则返回null
,然后返回key
方法:
/**
* Returns the key corresponding to the specified Entry.
* @throws NoSuchElementException if the Entry is null
*/
static <K> K key(Entry<K,?> e) {
if (e==null)
throw new NoSuchElementException();
return e.key;
}
因为对象本身是TreeMap
而不是NavigableMap
,您需要检查派生的实现和文档,即使引用是基础
答案 1 :(得分:1)
正如@Gilad Green所指出的,firstKey API的行为符合文档。
但我认为你可能正在寻找以下方法 -
firstEntry()
Returns a key-value mapping associated with the least key in this map, or null if the map is empty.
这将为您提供Map.Entry对象。在你的情况下,它将返回null,因为地图还没有任何条目。
答案 2 :(得分:0)
returns null if there is no key
这是关键的价值。但是你在问自己。
返回: 当前在此地图中的第一个(最低)键
抛出: NoSuchElementException - 如果此地图为空