Иерархия и структура данных в Java (или преобразование XML в объекты: лучшие практики) - PullRequest
0 голосов
/ 06 апреля 2009

Проблема: Допустим, есть XML-файл, который содержит как данные, так и иерархию определенных элементов, представляющих интерес для приложения:

  <root>
    <node title="lvl1Node">
        <node title="lvl2Node">
            <node title="lvl3Node"></node>
        </node>
    </node>
    <node title="lvl1Node2"></node>
    <node title="lvl1Node3">
        <node title="lvl2Node2">
            <node title="lvl3Node2">
                <node title="lvl4Node"></node>
            </node>
        </node>
    </node>
  </root>

Теперь предположим, что вашему приложению необходим API для извлечения этих узлов. Вам нужно написать метод, который возвращает узлы без потери информации об их иерархии.

Мой вопрос: как бы вы поступили? Какой тип данных вы бы использовали. Древовидный тип данных является очевидным ответом, но он не предусмотрен в стандартном API Коллекций, и написание его самостоятельно всегда является последним средством (программисты ленивы, изобретают велосипед и т. Д.).

Я также подумал о ArrayList, где каждый элемент является либо Object (для узла без подузлов), либо Arraylist (для узла с подузлами), но мне нравятся обобщения, и это слишком похоже на хак. Есть ли более умный способ сделать это?

Ответы [ 4 ]

1 голос
/ 06 апреля 2009

Err. Что именно вам нужно, что не покрывается DOM?

1 голос
/ 06 апреля 2009

Первый вопрос, который вы должны задать себе, - как вам нужен доступ к данным? Глубина первых итераций? Искать конкретные значения?

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

Итак, что-то вроде этого:

class Node {
  Node parent;
  List<Node> children;
}

Это похоже на связанный список, но каждый узел может разветвляться на произвольное количество дочерних элементов. Если вам нужно найти элементы по идентификатору напрямую, лучше всего сохранить отдельный индекс хэш-карты.

0 голосов
/ 06 апреля 2009

В прошлый раз, когда мне понадобилась древовидная структура - я обманул и использовал древовидную модель . Это не красиво (включает в себя подтягивание Swing), но работает очень хорошо! Жаль, что они не поместили это в API коллекций

0 голосов
/ 06 апреля 2009

Если у каждого элемента есть заголовок, вы можете использовать карту вместо списка. Делает доступ к каждому элементу более интуитивно понятным (используя имя узла вместо индекса).

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