При наличии дополнительных бизнес-требований, например, когда один человек может находиться только в одной комнате за раз (от комментариев к вашему вопросу), вам придется вернуться к пользовательской абстракции хранилища данных.
Я бы рекомендовал не раскрывать структуру данных, но предоставлять соответствующие абстракции бизнес-уровня для Rooms и People. В реализации вы должны будете делать больше, чем просто хранить вещи в простых коллекциях, например проверять бизнес-правила. Комментарии уже дают некоторые указания, но я рекомендую перестать думать о проблеме с точки зрения стандартных сборников.
Обратите внимание, что, имея в виду параллелизм, вы все равно можете оказаться в двух комнатах:
List<Person> people1 = ...getPeopleInRoom(1);
// concurrent changes here, in a different thread: somebody changes rooms
List<Person> people2 = ...getPeopleInRoom(2);
// you now may have the same person in two different lists -
// because when you asked for the occupants in a room, they
// were in the given room, but no longer are.