如何从Java中的特定键值开始迭代HashMap?

如何从Java中的特定键值开始迭代HashMap?,java,hashmap,iterator,Java,Hashmap,Iterator,有没有一种方法可以从一个特定的键开始HashMap中的迭代 假设我的地图是: Map map = new HashMap(); map.put(1,"A"); map.put(2,"B"); map.put(3,"B"); map.put(4,"B"); map.put(5,"F"); map.put(6,"Z"); 我希望迭代从键2开始 定期迭代包括: public static void printMap(Map map) { Iterator it = map.entrySet(

有没有一种方法可以从一个特定的键开始HashMap中的迭代

假设我的地图是:

Map map = new HashMap();
map.put(1,"A");
map.put(2,"B");
map.put(3,"B");
map.put(4,"B");
map.put(5,"F");
map.put(6,"Z");
我希望迭代从键
2
开始

定期迭代包括:

public static void printMap(Map map) {
    Iterator it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            System.out.println(pair.getKey() + " = " + pair.getValue());
        }
}

但是如何从一个特定的键开始迭代呢?

首先定义你的
map=newlinkedhashmap()
然后你可以像这样使用它

for(Map.Entry<Integer, String> entry: map.entrySet()){
    if(entry.getKey() == 1){
        continue;
    }
    System.out.println(entry.getKey() +" : "+ entry.getValue());
}
for(Map.Entry:Map.entrySet()){
if(entry.getKey()==1){
继续;
}
System.out.println(entry.getKey()+“:”+entry.getValue());
}

您的问题是基于对
HashMap
是什么的误解。特别是,如果您从键
2
开始并迭代剩余的条目,则不能保证您将获得具有键
2
3
4
5
6
的条目。。。按那个顺序,或者按任何顺序

HashMap
的迭代顺序是未定义的,并且在大多数情况下是不可预测的

然而。。。如果您使用
LinkedHashMap
TreeMap
并迭代条目,那么您将按照定义的顺序获取它们:

  • LinkedHashMap
    通常会按插入顺序给出条目
  • TreeMap
    将按键的比较顺序给出条目
如果使用
LinkedHashMap
,获取从给定键开始的所有条目(按插入顺序)的方法是从开始迭代,直到找到所需的键。例如:

public static void printMapFrom(LinkedHashMap<K, V> map, K from) {
    boolean found = false;
    for (Map<K, V>.Entry entry : map.entrySet()) {
        if (!found && !from.equals(entry.getKey())) {
            continue;
        }
        found = true;
        System.out.println(entry.getKey() + " = " + entry.getValue());
    }
}


如果您实际上不关心
HashMap
中键的顺序是不确定的,那么您可以将上面的
LinkedHashMap
版本与普通的
HashMap
ConcurrentHashMap

一起使用,因为迭代顺序未定义,所以不能使用HashMap。您需要一个树映射(或者查看索引,可能只是一个数组或列表)。此外,在您的示例中,您将
map
定义为一个。最好不要这样做(参见链接)。尝试使用
Map=newhashmap()
代替:您是否使用地图中的键(1,2,3,…)作为某种索引?或者它只是用于示例?HashMap不会按特定顺序对ts数据进行排序。您的问题无效,请阅读文档?按照建议使用树状图…感谢更新我我已将HashMap更改为linkedHashMapit将保留插入顺序通常仍不起作用。如果要跳过多个键,会发生什么?嘿,我知道这是很久以前的事了,但我正试图循环使用特定键的映射,映射的值也是另一个键,依此类推。有没有解决这个问题的好方法?这与本问答无关。请1)在现有问题中搜索类似您的问题,2)如果找不到问题,请询问新问题。
public static void printMapFrom(SortedMap<K, V> map, K from) {
    for (Map<K, V>.Entry entry : map.tailMap(from).entrySet()) {
        System.out.println(entry.getKey() + " = " + entry.getValue());
    }
}