Если я правильно понял ваши потребности, вы, в основном, хотите сделать отображение Node-> Vector один-ко-многим.
Если ваш узел правильно реализует hashCode () и equals (), вы можетеиспользуйте Multimap от Google Guava.Это обеспечивает отображение Map<Node,Collection<Vector>>
автоматически.
Преимущество использования Multimap заключается в том, что вам не нужно делать это:
Collection<Vector> vectors = nodeToVectorMapping.get(node);
if (vectors == null) {
vectors = new HashSet<Vector>();
nodeToVectorMapping.put(node, vectors);
}
vectors.add(vector);
, вместо этого вам нужно только сделать это:
nodeToVectorMapping.put(node,vector);
Multimap заботится о проверке, существует ли внутренняя Коллекция или нет.Если вы попадете в многопоточную среду, подход «сделай это вручную» будет включать синхронизацию, чтобы гарантировать, что два потока не создали коллекцию одновременно, и так далее.Гуава от Google очень помогает во всем этом, и многое другое.
Будучи большим поклонником Google Collections (оригинального дома Multimap, до того, как он был поглощен большим проектом Guava), я также должен указатьвы в направлении MapMaker , в котором есть все виды удивительных качеств, которые вы, возможно, найдете полезными - ограничения по размеру, уровни параллелизма, ленивая инициализация значений на основе ключей и тому подобное.Я использовал их в параллельном приложении, и они много раз спасали мою жизнь!:)