Какую структуру данных я могу использовать для сортировки / сравнения объектов по нескольким критериям? - PullRequest
1 голос
/ 07 сентября 2011

У нас есть коллекция объектов, каждый объект имеет целочисленный идентификатор и метку времени. Мы хотим иметь возможность искать дубликаты и обновлять коллекцию на основе идентификатора.

Но мы также хотим иметь возможность взять «фрагмент» коллекции, например, найти каждый объект с временной меткой по истечении заданного времени. Поэтому мы также хотим отсортировать метку времени.

Мы используем TreeMap, который сначала, казалось, дал нам то, что мы хотели. Но поскольку TreeMap (и все, что происходит от SortedSet) использует только compareTo () и игнорирует метод equals (), мы обнаруживаем, что поиск дубликатов на основе ID не работает. Наш метод compareTo () пытается учесть оба условия (поиск по ID ИЛИ отметке времени), но в конечном итоге он большой и некрасивый и фактически не работает. :)

Эта коллекция может стать очень большой, поэтому, конечно, мы хотим как можно быстрее искать / сортировать / вставлять.

1 Ответ

1 голос
/ 07 сентября 2011

Вы можете использовать два TreeMaps, один, который отображает ID на объекты, и другой, который отображает временные метки на объекты.

Затем вы можете легко найти объект, основываясь на его идентификаторе или на его метке времени.Вы также можете получить набор объектов, у которых есть временная метка в определенном диапазоне (как вы уже знаете).

Недостатком, очевидно, является необходимость удаления объектов из обеих коллекций.Это, однако, не должно быть так плохо, поскольку каждый объект знает как его идентификатор, так и его метку времени, поэтому, если вы хотите удалить по метке времени, вы получите идентификатор бесплатно, и вам просто придется выполнить еще одну операцию журнала.

Оберните их в свою собственную коллекцию, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...