2012-12-08 20 views
0

我很好奇是否有人有關於如何開始編寫實現Java的sortedmap接口的類的values()方法的提示。如果可能的話,示例代碼將非常感謝。如何在Java中編寫sortedMap的values()方法?

+0

你想要什麼? –

+2

您的排序地圖如何實施?這實際上只是實現'entrySet()'的一種特殊情況(就像'keySet()'),所以先考慮一下。 –

+0

更多詳情請 – alditis

回答

0

除非你SortedMap實現持續的清單(或任何其他穿越集合)地圖上的價值觀,你values()實現很可能是正是這一點(這是相當普遍的):

public Collection<V> values() { 
    List<V> values = new ArrayList<V>(); 
    for (K key: keySet()) { 
     values.add(get(key)); 
    } 
} 
+0

你的代碼效率很低。這裏有一個提示:查看Map.entrySet()' – Bohemian

+0

'entrySet()'仍然會遍歷'keySet()',遍歷每一個並實例化Map.Entry實例。我錯過了什麼? – Isaac

+0

你錯過了迭代條目集避免了你的代碼所做的n查找(通過調用'get()',這很貴),因爲你可以直接使用'entry.getValue()'。看到我的回答 – Bohemian

0

重點實施entrySet()。一旦你有,請這樣做:

public Collection<V> values() { 
    List<V> values = new ArrayList<V>(); 
    for (Map.Entry<K, V> entry : entrySet()) { 
     values.add(entry.getValue()); 
    } 
    return values; 
} 
+0

你一定要解釋爲什麼關注'entrySet()'更有利。此外,OP還特別詢問了「values()」;有可能'entrySet()'已經被寫入,誰知道,可能他甚至不能修改現有的'entrySet()'實現。 – Isaac

+0

關於你對我的回答的評論:你認爲這種方法更有效率,因爲'entrySet()'的一個假想的,可能不在OP內的控制實現比發佈一系列' get()'操作。坦率地說,沒有更多的信息來自OP,他們真的想要完成什麼(以及他們已經寫了些什麼),不可能得出比另一個更有效的方法。 – Isaac