像c ++ map这样的Java容器

时间:2014-03-02 15:08:13

标签: java c++ map iterator

Java中是否有任何容器允许我们按键使用迭代器,哪些容器可以同时使用下一个元素和前一个元素(如c ++中的地图)?

P.S。抱歉我的英文

3 个答案:

答案 0 :(得分:9)

NavigableMap最接近std::map。最常用的实现是TreeMap

NavigableMap 包含许多方法,可以按条目的排序顺序进行迭代。第一个循环遍历所有元素,而第二个循环则限制在子范围内。

NavigableMap<String, Integer> map = ...;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    // ...
}
for (Map.Entry<String, Integer> entry
   : map.subMap("bar", "foo").entrySet()) {
    // ...
}

也可以从开头到某个条目,或从某个条目到结尾进行迭代。看看以下方法:

在C ++中,迭代器也用于许多其他用例。 Java 迭代器非常不同,不能与变异操作结合使用。在许多情况下,您必须使用查找而不是迭代。例如,如果使用当前条目的键,则以下方法返回上一个和下一个条目(按排序顺序):

答案 1 :(得分:3)

您可以查看at the official documentation here

我认为您可以使用迭代器遍历地图的键集来实现您想要的效果。示例代码:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Test {

public static void main(String[] args) {

    Map<Integer, String> map = new HashMap<Integer, String>() {
        {
            put(1, "One");
            put(2, "Two");
            put(3, "Three");
            put(4, "Four");
            put(5, "Five");
        }
    };


    Iterator<Integer> iter = map.keySet().iterator();

    while(iter.hasNext()){
        System.out.println(iter.next());
    }
}

答案 2 :(得分:-1)

LinkedList类有一个listIterator方法,可以帮助你在两个方向上遍历