Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将空对象添加到ArrayList中的ArrayList_Java_Arraylist_Graph - Fatal编程技术网

Java 如何将空对象添加到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

我试图用邻接矩阵结构来表示一个adhoc网络。为此,我在另一个ArrayList中创建了一个ArrayList

当我向图中添加一个新顶点时,我创建了一个新的ArrayList(在超级ArrayList中),然后我有一个循环向每个ArrayList添加一个新的空对象,但是ArrayList的大小没有正确增加,我不知道为什么

这是我的密码:

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++ ) {