Как мне работать с системой многотипных деревьев в Java? - PullRequest
0 голосов
/ 24 марта 2012

Система RELOAD (http://rpg.hamsterrepublic.com/ohrrpgce/RELOAD) используется в GCS OHRRPGCE в качестве системы хранения данных на основе дерева. Узел в этой системе может иметь один из семи типов и любое количество дочерних элементов.

В настоящее время я пишу своего рода библиотеку для Java, чтобы обрабатывать RELOAD с помощью обобщений, но для меня это похоже на бред. Я правильно делаю или есть более эффективный способ?

Вот код для абстрактного узла RELOAD:

 /**
 * 
 */
package hamsterwrench.data.reload;

import java.util.ArrayList;

/**
 * @author Matt
 *
 */
public abstract class ReloadNode<T>{
    @SuppressWarnings("rawtypes")
    private ArrayList<ReloadNode> children = new ArrayList<ReloadNode>();
    private T data;
    private long nodeID;
    private String name;
    protected ReloadNodeType type;

    public ReloadNode(long id, String newName){
        name = newName;
        nodeID = id;
    }

    public T readData(){
        return data;
    }

    public void writeData(T input){
        data = input;
    }

    public String name(){
        return name;
    }

    public ReloadNodeType type(){
        return type;
    }

    @SuppressWarnings("rawtypes")
    public void addChild(ReloadNode r){
        children.add(r);
    }

    public int numberOfChildren(){
        return children.size();
    }

    public boolean removeChild(@SuppressWarnings("rawtypes") ReloadNode r){
        return children.remove(r);
    }

    @SuppressWarnings("rawtypes")
    public ReloadNode getChild(int i){
        return children.get(i);
    }

    public ArrayList<String> getChildrenNames(){
        ArrayList<String> result = new ArrayList<String>();
        for(int i = 0; i < children.size(); i++){
            result.add(children.get(i).name());
        }
        return result;
    }

    public long ID(){
        return nodeID;
    }
}

1 Ответ

1 голос
/ 24 марта 2012

Я не уверен, чего вы здесь добиваетесь.

Однако, похоже, вы заново реализуете базовую древовидную структуру.Реализация эффективной структуры - сложная задача, и вы, вероятно, пропустите некоторые тонкости.

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

То, что вы, вероятно, ищете, это красное черное дерево.Который доступен в пакете

java.util.TreeMap

http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

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

Здесь вы можете посмотреть

com.google.common.collect.TreeBasedTable

http://docs.guava -libraries.googlecode.com / git-history / v11.0.2 / javadoc / com / google / common / collect / TreeBasedTable.html

Все эти структурыуже являются общими.

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