Java 如何将空对象添加到ArrayList中的ArrayList
我试图用邻接矩阵结构来表示一个adhoc网络。为此,我在另一个ArrayList中创建了一个ArrayList 当我向图中添加一个新顶点时,我创建了一个新的ArrayList(在超级ArrayList中),然后我有一个循环向每个ArrayList添加一个新的空对象,但是ArrayList的大小没有正确增加,我不知道为什么 这是我的密码:Java 如何将空对象添加到ArrayList中的ArrayList,java,arraylist,graph,Java,Arraylist,Graph,我试图用邻接矩阵结构来表示一个adhoc网络。为此,我在另一个ArrayList中创建了一个ArrayList 当我向图中添加一个新顶点时,我创建了一个新的ArrayList(在超级ArrayList中),然后我有一个循环向每个ArrayList添加一个新的空对象,但是ArrayList的大小没有正确增加,我不知道为什么 这是我的密码: public class Matrix { public ArrayList<ArrayList<Edge>> graph; publ
public class Matrix {
public ArrayList<ArrayList<Edge>> graph;
public ArrayList<Vertex> verticies;
public ArrayList<Edge> edges;
public Matrix() {
graph = new ArrayList();
verticies = new ArrayList();
edges = new ArrayList();
}
public Matrix(ArrayList<Vertex> verticies, ArrayList<Edge> edges) {
this.verticies = verticies;
this.edges = edges;
}
public void addVertex(Vertex v) {
verticies.add(v);
graph.add(new ArrayList());
for(int i=0; i<graph.size()-1; i++ ) {
graph.get(i).add(null);
}
}
公共类矩阵{
公共阵列列表图;
公共阵列垂直;
公共阵列列表边缘;
公共矩阵(){
graph=新的ArrayList();
Vertices=新的ArrayList();
边=新的ArrayList();
}
公共矩阵(ArrayList垂直、ArrayList边){
这个。垂直=垂直;
这个。边=边;
}
公共无效添加顶点(顶点v){
增加(五);
add(newarraylist());
对于(int i=0;i而言,图形的初始大小为0
,因此addVertex()
中的for
循环的运行时间比它应该运行的时间短一倍:
public void addVertex(Vertex v) {
verticies.add(v);
graph.add(new ArrayList()); // graph now has size 1
for (int i = 0; i < graph.size() - 1; i++) { // i = 0, 0 < 0 is false
graph.get(i).add(null); // this is not executed for the last added list
}
}
即使使用此修复程序,请注意,如果调用addVertex()
5次,也会出现如下情况:
index ArrayList
0 [null, null, null, null, null]
1 [null, null, null, null]
2 [null, null, null]
3 [null, null]
4 [null]
这可能不是您想要的。更好的方法是先添加所有顶点:
public void addVertex(Vertex v) {
this.vertices.add(v);
}
然后为具有适当大小的邻接矩阵创建ArrayList
s:
public void initializeAdjacencyMatrix() {
int n = this.vertices.size();
for (int i = 0; i < n; i++) {
List<Edge> edges = new ArrayList<>(Collections.nCopies(n, null));
graph.add(edges);
}
}
在这一行:
for(int i=0; i<graph.size()-1; i++ ) {
for(int i=0;我感谢您的帮助,但是现在ArrayList的大小每次减少1(例如,如果graph.size()为5,graph.get(1)。size()为5,graph.get(2)。size()是4等。真的让我困惑吗D:@AlexGlassman这是因为每次创建新列表时,您都会将null
添加到所有以前的列表中。因此,首先创建的列表将有更多的null
s。我用一个建议更新了答案以处理此问题。解决方法很好,但是我必须将内部数组列表的类型更改为Obj诸如此类?@AlexGlassman是的,如果您使用的是Java 7,则需要将类型参数传递给nCopies()
:newArrayList(Collections.nCopies(n,null));
graph = new ArrayList<>();
graph.add(new ArrayList<>());
for(int i=0; i<graph.size()-1; i++ ) {