如何使用此参数映射制作java映射<;对象,ArrayList<;对象>>;?

如何使用此参数映射制作java映射<;对象,ArrayList<;对象>>;?,java,dictionary,Java,Dictionary,我正试图填写一张这样声明的地图 Map<Person, ArrayList<Location>> personByLocation = new HashMap<String, ArrayList<Location>>(); 我正试图在这张地图上做一个记录,但现在我不知道怎么做。如果我创建一个Person实例并将其作为一个键,那么记录作为该键的值的数据将与ArrayList中的位置数据一起复制 这是我所做的,但根本不起作

我正试图填写一张这样声明的地图

Map<Person, ArrayList<Location>> personByLocation = 
            new HashMap<String, ArrayList<Location>>();

我正试图在这张地图上做一个记录,但现在我不知道怎么做。如果我创建一个Person实例并将其作为一个键,那么记录作为该键的值的数据将与ArrayList中的位置数据一起复制

这是我所做的,但根本不起作用

    Location location = new Location(LocationType.Paris, "sunny");
    Person person = new Person(new Location(LocationType.Paris, "sunny"), "Timm");

    for (Entry<Person, ArrayList<Location>> entry : personByLocation.entrySet()) {
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
Location-Location=新位置(LocationType.Paris,“sunny”);
人员=新人员(新地点(LocationType.Paris,“sunny”),“Timm”);
for(条目:personByLocation.entrySet()){
System.out.println(entry.getKey()+“”+entry.getValue());
}

首先。。。这不会编译:

Map<Person, ArrayList<Location>> personByLocation = new HashMap<String, ArrayList<Location>>();
然后填写
地图

personByLocation.put(person, list);
如果您添加另一个
Person
as键,则不会替换该键,相反,如果您将一个人实际包含在列表中,但更新了
Person.location
list
则会替换该键


注意:还要考虑替换
Person
实体的
equals()
hashCode()
方法。

我不建议按照@Mena的建议将一个人的所有位置放入类
Person
中,而只是从所有人那里检索一个
集合。这是因为

首先,您需要修复映射的实例化

Map<Person, List<Location>> personByLocation = new HashMap<Person, List<Location>>();
当您向地图添加值时,首先必须检查此人是否已经存在条目。否则,您将覆盖已为该人员存储的值

List<Location> myLocations = new ArrayList<Location>();
...
if(personByLocation.containsKey(person)) {
    List<Location> storedLocations = personByLocation.get(person);
    storedLocations.addAll(myLocations);
} else {
    personByLocation.put(person, myLocations);
}
List myLocations=new ArrayList();
...
if(personByLocation.containsKey(person)){
List storedLocations=personByLocation.get(person);
storedLocations.addAll(myLocations);
}否则{
personByLocation.put(person,mylocation);
}

Map personByLocation=new HashMap()不会编译,我保证。好的。正确的方法是什么?首先为什么要使用
地图
?使用
集合
并从你的
s检索位置。我只是想写一些代码,同时在一些数据结构上做得更好。是的@andreas,太棒了;)
Location l1 = new Location(LocationType.Paris, "sunny");
Location l2 = new Location(LocationType.London, "cloudy");
Location l3 = new Location(LocationType.Wiena, "rain");

List<Location> list = new ArrayList<Location>();
list.add(l1);
list.add(l2);
list.add(l3);

Person person = new Person(new Location(LocationType.Paris, "sunny"), "Timm");
personByLocation.put(person, list);
Map<Person, List<Location>> personByLocation = new HashMap<Person, List<Location>>();
Location location = new Location(LocationType.Paris, "sunny");
Person person = new Person(location, "Timm");

for (Map.Entry<Person, List<Location>> entry : personByLocation.entrySet()) {
    Person p = entry.getKey();
    List<Location> locations = entry.getValue();
    for(Location loc : locations) {
        System.out.println(p + " " + loc);
    }
}
List<Location> myLocations = new ArrayList<Location>();
...
if(personByLocation.containsKey(person)) {
    List<Location> storedLocations = personByLocation.get(person);
    storedLocations.addAll(myLocations);
} else {
    personByLocation.put(person, myLocations);
}