如何在Java中编写sortedMap的values()方法?

如何在Java中编写sortedMap的values()方法?,java,interface,sortedmap,Java,Interface,Sortedmap,我很好奇是否有人知道如何开始编写实现Java的sortedmap接口的类的values()方法。如果可能的话,我们将非常感谢示例代码。TreeMap是SortedMap接口的一个实现,可能是进行一些研究的好地方: 除非您的SortedMap实现保留地图值的列表(或任何其他可遍历的集合),否则您的values()实现很可能就是这样的(非常普遍): 公共集合值(){ 列表值=新的ArrayList(); 对于(K键:键集()){ add(get(key)); } } 专注于实现entrySet()。

我很好奇是否有人知道如何开始编写实现Java的
sortedmap
接口的类的
values()
方法。如果可能的话,我们将非常感谢示例代码。

TreeMap是SortedMap接口的一个实现,可能是进行一些研究的好地方:

除非您的
SortedMap
实现保留地图值的列表(或任何其他可遍历的集合),否则您的
values()
实现很可能就是这样的(非常普遍):

公共集合值(){
列表值=新的ArrayList();
对于(K键:键集()){
add(get(key));
}
}

专注于实现
entrySet()
。一旦有了这些,请执行以下操作:

public Collection<V> values() {
    List<V> values = new ArrayList<V>();
    for (Map.Entry<K, V> entry : entrySet()) {
        values.add(entry.getValue());
    }
    return values;
}
公共集合值(){
列表值=新的ArrayList();
对于(Map.Entry:entrySet()){
add(entry.getValue());
}
返回值;
}

您的排序地图是如何实现的?这实际上只是实现
entrySet()
(正如
keySet()
)的一个特例,所以请首先考虑这一点。这在很大程度上取决于您的排序映射实现。您是否已经制定了按顺序遍历地图条目的方法?如果是这样的话,那么values()的实现就相当简单了。您的代码效率很低。这里有一个提示:签出
Map.entrySet()
entrySet()
最终仍将迭代
keySet()
,查找每一个并实例化
Map.Entry
实例。我遗漏了什么?您遗漏了迭代条目集可以避免代码进行n次查找(通过调用
get()
,这很昂贵),因为您可以直接使用
entry.getValue()
。看我的回答,你肯定要解释为什么专注于
entrySet()
更有益。此外,OP特别询问了
值();有可能
entrySet()
已经编写好了,谁知道呢,也许他甚至不能修改现有的
entrySet()
实现。关于你对我的回答的评论:你的结论是这种方法更有效,因为,
entrySet()
的OP-control实现可能不在其中,它比发出一系列
get()
操作更有效。坦率地说,如果没有OP提供更多关于他们真正想要完成什么(以及他们已经写了什么)的信息,就不可能得出一种比另一种更有效的方法。
public Collection<V> values() {
    List<V> values = new ArrayList<V>();
    for (Map.Entry<K, V> entry : entrySet()) {
        values.add(entry.getValue());
    }
    return values;
}