如何为TreeMap和HashMap(Java)创建可迭代包装器?

sna*_*ile 4 java iterator iterable hashmap treemap

我有一个包含TreeMap的MyMap类.(说它是狗的集合,键是字符串).

public class MyMap {
   private TreeMap<String, Dog> map;
...
}
Run Code Online (Sandbox Code Playgroud)

我想用for-each循环将MyMap迭代.我知道如果我的类是LinkedList包装器我会怎么做:

public class MyList implements Iterable<Dog> {
   private LinkedList<Dog> list;
   ...
   public Iterator<Dog> iterator() {
      return list.iterator();
   }
}
Run Code Online (Sandbox Code Playgroud)

但是这样的解决方案不适用于TreeMap,因为TreeMap没有迭代器().那么如何才能使MyMap可迭代?

除了MyMap之外,同样的问题包含了HashMap(而不是TreeMap).

谢谢.

Jon*_*erg 8

public Iterator<Dog> iterator() {
      return map.values().iterator();
}
Run Code Online (Sandbox Code Playgroud)


har*_*are 6

这是因为你只能迭代地图的键或值,而不是地图本身

通常你可以这样做:

for( Object value : mymap.values()  ){
  System.out.println(value);
}
Run Code Online (Sandbox Code Playgroud)

所以,我建议的是:你的Map需要有一个可迭代的吗?如果你只是想要获得价值......或者密钥本身,那就不是了.

另外,请考虑使用Google的转发集合,例如ForwardingList