Можно ли создать дерево объектов в Java? - PullRequest
2 голосов
/ 02 сентября 2011

Я пытаюсь создать дерево объектов в Java. Я также хочу использовать класс Java, который позволяет легко добавлять или удалять узлы из дерева. Какой класс лучше всего использовать для этой цели?

Пример: вот массив объектов. Объект в верхней части массива - это строка «мир». Листья здесь целые, и я хочу добавить строку «Это в (world, 0, 0)!» как лист в "(мир, 0, 0)". Какой класс Java подойдет для этой цели?

"world"
  /\
 0  1
/ \  /\
0 1  0 1

Ответы [ 2 ]

10 голосов
/ 02 сентября 2011

Сделай сам. Это просто. Супер супер просто:

public class Tree{
    public Node root;
}

public class Node{
    public ArrayList<Node> children;
    public Node parent;
    public String value;
}

Теперь добавление строкового значения с последовательностью целых чисел будет сделано примерно так:

public class Tree{
    public String put(String value, int[] path){
        Node current = root;
        for(int i=0;i<path.length;i++){
            if(current.children.get(i)==null){
                current.children.add(i, new Node());
            }
            current = current.children.get(i);
        }
        String ret = current.value;
        current.value = value;
    }
}

Получение значения будет аналогичным, за исключением того, что вы не перезапишете текущее значение заданным значением.

Описание того, что put делает на английском языке:

  • Перейдите к n th дочернему узлу текущего узла, где n - следующее значение в вашем пути.
  • Если ребенка не существует, создайте его.
  • Повторяйте, пока не будет достигнут конец пути.
  • Возвращает текущее значение (необязательно)
  • Установите новое значение.

Таким образом, использование этого будет выглядеть примерно так:

Tree myTree = new Tree();
myTree.root = new Node();
int[] path = {0, 0, 0};
myTree.put("hi", path);
System.out.println(myTree.get(path));

И вы получите "привет" в своей консоли.

2 голосов
/ 02 сентября 2011

Это звучит смутно, как домашнее задание. Это? Обычно лучше быть честным, если это так.

На самом деле в Java нет структуры данных, которая будет делать то, что вы хотите, так как кажется, что вы заинтересованы в прямых манипуляциях с деревом. Коллекции Java больше относятся к предоставленному абстрактному типу данных (List, Set, Map), чем к особенностям реализации поддержки; различные реализации предоставляются для их различных характеристик производительности.

В итоге, вам, вероятно, лучше написать свою собственную. Если все, что вас действительно волнует, это отображение одного ключа на значение, то любая из реализаций Map будет успешной.

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