你能像在 ArrayList 中一样循环遍历 HashMap 吗? 所以如果我有一个 Person 类:
public class Person
{
private String name;
private int age;
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
然后有一类成员(member)资格,并使用数组列表我可以确保名称不重复:
import java.util.ArrayList;
public class Memberships
{
private ArrayList<Person> members;
public Memberships()
{
ArrayList<Person> members = new ArrayList<Person>();
}
public void addMember(String name, int age)
{
Person p = new Person(name, age);
for (Person membs : members)
{
if (membs.getName().equals(name) && membs.getAge()==age)
{
return;
}
}
members.add(p);
}
}
但是,如果我想使用 HashMap 来代替姓名和年龄:
HashMap<String, Integer> members = new HashMap<String, Integer>();
然后我想做同样的事情,并检查姓名和年龄是否与另一个案例相同,我可以使用循环并检查吗?
public class Memberships
{
private HashMap<String, Integer> members;
public Memberships()
{
members = new HashMap<String, Integer>();
}
public void addMember(String name, int age)
{
members.put(name, age);
}
}
我知道这样做有点奇怪,我只是想了解 HashMap。
好吧,然后我改变了它,这样:
HashMap<Person, ID> members = new HashMap<Person, ID>();
然后我想:
public void addMember(String name, int age)
{
Person p = new Person (name, age);
members.put(p, id);
//**Say the id is a randomly generated number, that I don't really care about now
}
我如何检查人 p 的姓名和年龄与成员 HashMap 中的另一个人不同?
最佳答案
为什么要循环?您可以简单地测试 key 是否存在:
if( members.containsKey( name ) ){
// duplicate
}
不过,您可以迭代:
for( Map.Entry<String,Integer> e: members.entrySet() ){
// use e.getKey(), e.getValue()
}
稍后
自从鲍里斯提出这个问题以来:
Map<String,Person> members
是将名称集映射到人员集的一种方法。如果年龄也有助于区分Persons,则必须注意Boris提示:将hashCode和equals添加到Person(都使用name和age来hashCode comp和比较),然后你就可以这样做
Set<Person> members
members.contains( p ) 会告诉你一个平等的 Person 是否已经是成员。
关于java - 你能像在 ArrayList 中那样循环遍历 HashMap 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008742/