当前位置: 首页 > 知识库问答 >
问题:

Java中的二维列表

米景辉
2023-03-14

有没有办法处理二维Java列表?

情况:我有一个带有节点、边和每条边的权重的图。现在我需要一个数据结构来存储每个节点: a)它的邻居b)每个邻居的边权重

首先,我想到了创建一个新的类“节点”,带有标识符和类似二维数组的东西来存储邻居标识符和边权重。但是每个节点的邻居数量没有给出,并且在运行时可能会动态增加。因此,我认为二维数组不是这里要走的路。

我想在类“节点”中有一个列表是可能的,比如:

List<node> neighbours = new ArrayList<node>();

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

有人知道如何构造这样一个“图”,其中每个节点都存储了邻居的标识符和相应的边权重吗?

感谢您阅读:-)

共有3个答案

蔺霄
2023-03-14

Guava中的表接口可能有一些用处。我从来没用过,但我听说它很好。此创建方法可能有一些用处

洪俊捷
2023-03-14

你可以这样做:

List<Connection> connections = new ArrayList<Connection>();

其中“连接”定义为:

Class Connection {
    private int weight;
    private Node node;

    .... add getters/setters here ....
} 
甘骞尧
2023-03-14

最直接的方法是使用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>>();
 类似资料:
  • 问题内容: 我有一个Object的二维数组。所以我有。将其转换为Java 的最佳方法是什么? 问题答案: 对于任何二维数组,这都是一种不错的方法,假设您希望按以下顺序进行操作: [[array [0] -elems],[array [1] elems] …]

  • 问题内容: 我想获取所有列的总和,但是我不断收到出站异常。这是我得到的输出: 问题答案: 您的外部for循环条件给您带来了问题。这是您的循环:- 现在,当达到该值时,您正在尝试访问。这将引发异常。 由于每个内部数组的大小都相同,因此可以 将循环更改为 :- 或者,甚至更好的是,只需事先存储一些变量。但这并没有太大的区别。 我还建议您使用更好的方法来计算列的总和。避免首先迭代行。保持迭代正常,大概是

  • 如何动态调整列的大小以支持可能的不规则数组? 上面的代码会分配每个col的长度吗? 事先谢谢你的帮助。

  • 我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素

  • 问题内容: 我试图摆脱n维数组。有没有一种不错的API方法可以做到这一点?我知道两个流的连接方法。 问题答案: 假设您要以行优先的方式顺序处理数组的数组,这应该可以工作: 首先,它调用方法(其中推断为)以获取,然后方法将每个元素映射到using 方法。

  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]