Какова лучшая структура данных для иерархического представления данных в Java? - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно создать структуру данных в Java, которая может представлять иерархию данных. Пример использования показан на рисунке ниже.

иерархия организации

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

Можно ли использовать вложенные карты или я должен реализовать m-способ дерева (B дерево / B + дерево) для этого варианта использования.

Ответы [ 3 ]

0 голосов
/ 07 октября 2019

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

Идея кода высокого уровня

class Entity{  
    // declare you attributes and below two properties

    List<Entity> children;

    boolean isleafNode;// for parent node its 'false' and for leaf node it will 'true'

    }
0 голосов
/ 07 октября 2019

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

определение класса:

public class TrieNode {
    private HashMap<String, TrieNode> children;
    private Data data;
    private boolean isLeaf;

   // ...
}

запрос поиска будет выглядеть следующим образом:

public Data find(List<String> compositeKey) {
    TrieNode current = root;
    for (String key: compositeKey) {
        TrieNode node = current.getChildren().get(key);
        if (node == null) {
            return null;
        }
        current = node;
    }
    if(current.isLeaf()) {
       return current.getData();
    } else {
       return null;
    }         
}

вставка будет выглядеть следующим образом:

public void insert(List<String> compositeKey, Data data) {
    TrieNode current = root;

    for (String key: compositeKey) {
        current = current.getChildren()
          .computeIfAbsent(key, c -> new TrieNode());
    }
    current.setLeaf(true);
    current.setData(data);
}
0 голосов
/ 07 октября 2019

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

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

Об использовании пользовательской древовидной структуры, если вы можете использовать классы, это лучше. Если вы используете Map s, я начну с HashMap, и если вы обнаружите, что это проблема, вы можете заменить Map на что-то другое позже.

...