2017-07-07 28 views
-2

從的NavigableMap的Java文檔:firstKey() of Navigable map 的NavigableMap拋出異常無用

返回與此映射中的最小鍵;如果映射爲空,空關聯的鍵 - 值映射。

然而,當我運行下面的程序我得到NoSuchElementException

public class Test1 { 
     public static void main(String a[]) { 
      NavigableMap<Object, Object> map = new TreeMap<>(); 
      Object obj = map.firstKey(); 
     } 
    } 

我不知道如果我失去了一些東西,請讓我知道爲什麼它的行爲就像這樣?

+1

根據[JavaDocs'NavigableMap#firstKey'](https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html#firstKey--)它*「拋出: NoSuchElementException - 如果此映射爲空「* – MadProgrammer

+0

@Joker - 它不會說firstKey。 –

+0

必須學會閱讀javadocs –

回答

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你需要檢查派生的實現和文檔,即使基準是基礎

+0

請檢查https://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html#firstEntry() –

+0

@Joker - 請參閱更新 –

0
returns null if there is no key 

這是用鍵的值。但你在問自己。

K firstKey()

返回: 第一(最低)目前在這個地圖

拋出鍵: NoSuchElementException - 如果此映射爲空

1

正如@Gilad格林指出的,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,因爲地圖還沒有任何條目。