如何使用此参数映射制作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);
}