如何遍历Java Linked Hash映射?

use*_*021 16 java loops hashmap

我搜索了这个问题并找到了像这里一样使用Map.Entry的答案,但是getValue()方法返回了一个Object对象而不是map中对象的类型.就像下面的例子一样,我需要它来返回一个User对象,这样我就可以使用该类中的方法了.然而,当我尝试使用下面的while循环时,它永远不会离开循环.我想知道这样做的正确方法.

Map<String, User> users = new LinkedHashMap<String, User>();
users.put(name, user);

while(users.values().iterator().hasNext()){

   currentUser = users.values().iterator().next();
   currentUser.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 23

我想知道这样做的正确方法.

你应该使用这种Map.Entry类型; 您只需要提供与泛型一起使用的类型参数:

for (Map.Entry<String,User> entry : users.entrySet()) {
    // entry.getValue() is of type User now
}
Run Code Online (Sandbox Code Playgroud)


use*_*421 17

你误用了Iterator,你省略了泛型规范.

Iterator<User> it = users.values().iterator();
while (it.hasNext())
{
  User currentUser = it.next();
  currentUser.someMethod();
}
Run Code Online (Sandbox Code Playgroud)