添加到列表矩阵中的指定列表

时间:2015-02-01 21:10:56

标签: java list matrix

这是一个家庭作业程序,我正在研究算法课程。任务是使用列表矩阵模拟图形的邻接矩阵(这是Java btw)。矩阵的元素被解释为第一个节点。它在图中连接的任何节点都被添加到那个矩阵元素的列表中。我已经构造了这样的矩阵:

List<Node>[] weightedList = new List[size]

我知道对象列表和类型检查存在问题。然后我调用方法initializeList()来构造初始结构。

protected void initializeList() {
        List<Node> list = new ArrayList<Node>();
        for (int i = 1; i < Tester.size; i++){
            weightedList[i] = list;
        }
    }

当我处理输入数据时,我需要根据给定的节点值“构造”图形。我的问题在于,当我调用addEdge()(实际上,连接两个节点创建一个Edge)时,我试图添加的节点被添加到矩阵的每个元素中。这是方法:

public static void putEdge(Edge e) {
        Node node1 = e.getVertex1();
        Node node2 = e.getVertex2();
        int dim1 = node1.getNode();
        if (dim1 < Tester.size){
            weightedList[dim1].add(node2);
        }   
    }

我的问题是否与对象列表或其他内容中固有的类型检查问题有关?请指教。

- JQK

3 个答案:

答案 0 :(得分:1)

将相同的列表实例分配给数组的所有索引。

您应该在循环中实例化每个列表:

protected void initializeList() {
    for (int i = 0; i < Tester.size; i++){
        List<Node> list = new ArrayList<Node>();
        weightedList[i] = list;
    }
}

这样,数组中的每个索引都将包含一个不同的ArrayList实例。

你可能应该从0开始迭代,因为它是数组的第一个索引。

答案 1 :(得分:0)

您在此处遇到的问题只是复制对象的引用,而不是对象本身。 @Eran的解决方案显示了如何为每个矩阵元素分配不同的列表。

答案 2 :(得分:0)

谢谢@Eran。你的解决方案是对的。我个人的错误。我还不能投票,我也不确定如何为你提供解决方案。

我的错误是initializeList()

中作业语句的位置

这是@Eran提供的正确格式。

protected void initializeList() {
    for (int i = 0; i < Tester.size; i++){
        List<Node> list = new ArrayList<Node>();
        weightedList[i] = list;
    }
}