Java中的二维列表

5
有没有办法在Java中将列表处理为二维数组?
情况如下:我有一个带有节点、边和每个边的权重的图。现在我需要一种数据结构来存储每个节点的:
a)邻居
b)每个邻居边的权重
起初,我想创建一个新类“node”,其中包含一个标识符和类似于二维数组的内容来存储邻居标识符和边缘权重。但是,每个节点的邻居数量未知并且可能会在运行时动态增加。因此,在这里不应使用二维数组。
我认为可以在类“node”中使用以下列表:
List<node> neighbours = new ArrayList<node>();

但显然,这只处理邻居节点 - 而不是它们边的权重。

有没有人有提示如何构建这样一个“图”,其中存储了每个节点的邻居标识符和相应的边权重?

谢谢您的阅读 :-)


一个二维数组可以实现,但如果不必要按照二维数组的方式实现,你也可以灵活运用。我可以建议在Java中使用MAPS吗?http://docs.oracle.com/javase/6/docs/api/java/util/Map.html - Mukul Goel
2
类似于:https://dev59.com/M3RB5IYBdhLWcg3wAjbR - yiannis
JGraphT非常棒,是Java地图的一个很好的替代品! - coroner
3个回答

4

最简单的方法是使用HashMap

    class Edge {
// represents edge with destination node and it's weight
        private final Node node;
        private final int weight;

        Edge(Node node, int weight) {
            this.node = node;
            this.weight = weight;
        }

    }

// represents map which holds all outgoing edges keyed by source nodes.
    Map<Node, Set<Edges>> edgesByOutgoingNodes = new HashMap<Node, Set<Edges>>();

@coroner HashMap 是一个不错的选择..;-) - Mukul Goel

0
你可以像这样做:
List<Connection> connections = new ArrayList<Connection>();

'Connection' 的定义如下:

Class Connection {
    private int weight;
    private Node node;

    .... add getters/setters here ....
} 

0

Guava中的Table接口可能会有所帮助。我从未使用过,但听说它很好用。这个create方法可能也会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接