Почему API коллекций Java не включает реализацию Graph? - PullRequest
8 голосов
/ 06 июня 2010

В настоящее время я изучаю API коллекций Java и чувствую, что хорошо понимаю основы, но никогда не понимал, почему этот стандартный API не включает реализацию Graph. Три базовых класса легко понятны (List, Set и Map), и все их реализации в API в основном просты и последовательны.

Учитывая, как часто графики представляют собой потенциальный способ моделирования данной проблемы, это просто не имеет смысла для меня (возможно, оно существует в API, и я, конечно, не смотрю в нужном месте) , Стив Йегге предлагает в одном из своих постов в блоге, что программист должен сначала рассмотреть графы при атаке на проблему, а если проблемная область не вписывается естественным образом в эту структуру данных, то только затем рассмотреть альтернативные структуры.

Мое первое предположение состоит в том, что не существует универсального способа представления графиков или что их интерфейсы могут быть недостаточно универсальными, чтобы реализация API была полезной? Но если вы урезаете граф до его основных компонентов (вершин и набор ребер, которые соединяют некоторые или все вершины) и рассмотрите способы, как графы обычно строятся (методы, такие как addVertex (v) и insertEdge (v1, v2) Кажется, что реализация графов будет возможна и полезна.

Спасибо, что помогли мне лучше понять это.

1 Ответ

13 голосов
/ 06 июня 2010

Обратите внимание, что некоторые специальные графы включены в Collection Framework, в частности, связанные списки и деревья.

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

Кроме того, по крайней мере в моей практике до сих пор я не чувствовал потребности в графиках большую часть времени.Некоторые домены действительно нуждаются в них, но многие просто не нуждаются.(Из более чем дюжины проектов в различных областях, в которых я принимал участие, я перечислил два, которые действительно нуждались в графиках.) Так что я думаю, что сообщество Java в целом не оказывало большого давления, чтобы иметь граф в коллекции.Фреймворк.Он содержит только основной материал, который нужен «почти всегда», «почти всем».И одна из его сильных сторон - это (относительная) простота и ясность, которую, как я полагаю, ее дизайнеры видят в качестве сохраняемого актива.

...