gpt4 book ai didi

java - 如何在 Java 中对 ArrayList 的 ArrayList 进行操作?

转载 作者:行者123 更新时间:2023-12-03 19:39:43 26 4
gpt4 key购买 nike

在 Java 中操作 ArrayList 的 ArrayList 时遇到问题。我的代码中有这个东西-

ArrayList<ArrayList<Integer>> L1 = new ArrayList<ArrayList<Integer>>();

问题是,我不知道该如何操作(添加、删除、遍历等)。我希望创建一个邻接表(用于实现简单的无向图),我的导师建议我应该创建一个 ArrayList 的 ArrayList。我知道我可以执行以下操作来添加新元素-

L1.add(//Something I want to add);

但由于显而易见的原因,这会在当前情况下引发错误。

最佳答案

一个 ArrayListArrayList,只要认为外部对象是一个 ArrayList 就可以了。

ArrayList<ArrayList<Integer>> list2d = new ArrayList<ArrayList<Integer>>();
// add an element to the list
list2d.add(new ArrayList<Integer>());
// retrieve a list
ArrayList<Integer> list1d = list2d.get(0);
// add an integer
list2d.get(0).add(123);

顺便说一句,邻接表只是边的列表,没有必要为每个顶点存储它们,特别是如果图是无向的。 Edge 的列表就足够了:

class Edge {
Vertex v1, v2;
}

ArrayList<Edge> adjacencyList;

如果你想在每个顶点的基础上存储它们,那么你可以通过将边封装在顶点类本身中来避免使用列表列表,但这将需要两倍的边:

class Vertex {
int value;
ArrayList<Vertex> adjacency;
}

但哪个最好取决于你需要对图执行什么样的操作。对于小图,没有实际区别。

另一种可能的实现,如果你只需要知道两个顶点是否相连:

class Edge {
public final int v1, v2;

public boolean equals(Object o) { return o != null && o instanceof Edge && o.hashCode() == hashCode(); }

public int hashCode() { return v1 ^ v2; } // simple hash code, could be more sophisticated
}

Set<Edge> adjacencyList = new HashSet<Edge>();

关于java - 如何在 Java 中对 ArrayList 的 ArrayList 进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com