Как найти наборы узлов для каждой степени, найденной в графе

Я пытаюсь заполнить хэш-карту, где ключи - это степень узлов, а значения - это коллекция всех узлов с этим значением степени. Прямо сейчас я придумал этот код:

// hashmap to hold the result 
HashMap<Integer, Collection<Node>> result = new HashMap<Integer, Collection<Node>>();
// for each node in the list
for (Node n : nodes) {
    // find node's neighbors
    n.setNei(g.getNeighbors(n));
    // find node's degree
    n.setDegree(n.getNei().size());
    // placeholder
    Integer degree = n.getDegree();
    // if that degree is already present as a key in result
    if (result.containsKey(degree)) {
        // add n to the list of nodes that has that degree value
        boolean add = result.get(degree).add(n);
        // check
        if (!add) {
            // raise exception
            throw new ExtensionException("ERROR: failed to add node to list of nodes with degree " + degree);
        }
        // if that degree is not already present in result
    } else {
        // create a new empty collection of nodes
        List<Node> newList = new ArrayList<Node>();
        // add n as the first element in the new collection
        boolean add = newList.add(n);
        // check
        if (add) {
            // add degree to the key and the collection of nodes with such degree
            result.put(degree, newList);
        } else {
            // raise exception
            throw new ExtensionException("ERROR: failed to add node to list of nodes with degree " + degree);
        }
    }
}

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

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

С наилучшими пожеланиями, Симона

1 ответ

Решение

То, что вы делаете, по сути правильно, но это может быть сделано более эффективно: * Graph уже имеет метод степени () * Узлу не нужно хранить соседей или степень; график делает это за вас * вы можете использовать Guava MultiMap *

Другие вопросы по тегам