Java 中是否有支持按(非唯一)值查找键的映射?

dew*_*rde 0 java guava

我有一个设置,我的每个“人”都映射到一个特定的“房间”。

但是,多人可以映射到同一个房间。

如果看到现有人员,则应将其房间更新为新值。

所以这是传统的用例 Map<Person, Room>.put(Person, Room)

但是,查找始终是“这个房间里有哪些人?” Set<People> get(Room q){}

我显然可以制作自己的数据结构或简单地迭代键值对;但是其中一个 Java 集合库是否具有良好的结构来支持我需要的参照完整性和查找?

Chr*_*s94 5

要回答您的具体问题,不,您不能用一种数据结构完成所有工作。我会解决它

Map<Person,Room> personRoom;
SetMultimap<Room,Person> roomPeople;
void addPersonToRoom(Person p,Room r){
    Room currentRoom = personRoom.get(p);
    if (currentRoom != null)
        roomPeople.remove(currentRoom, p);
    personRoom.put(p,r);
    roomPeople.put(r,p);
}
Set<Person> getPeopleInRoom(Room r){
    return roomPeople.get(r);
}
Room getRoomForPerson(Person p){
    return personRoom.get(p);
}

Run Code Online (Sandbox Code Playgroud)