将一些对象放入一个数组中

时间:2015-01-05 12:23:03

标签: java arrays object

将新对象添加到对象数组时遇到问题。 看:

 A.adjacencies = new Edge[] { new Edge(M, 8) };

这是一个示例,其中Edge []由一个Object组成。但我不知道Edge []有多少物体,因为我从文件中取出数字。我采取了" vertexes"从文件到顶点[],工资从文件到工资[]。 该文件看起来像:

1 2 3
3 4 5
3 2 1
4 56 7
2 3 5 
5 2 1

每行的第一个和第二个数字是顶点,第三个是工资。

我写了这样的代码:

    Vertex[] vertices = new Vertex[N];

    for(int i=0; i<N; i++)
        vertices[i] = new Vertex(i);

    int w_1 = Vertex[0], w_2 = 0, wage = 0;

    for(int i=0; i<Vertex.length; i++) {
    if(Vertex[i] == w_1) {
        if(i%2 == 0) {
        if(wage == 0) wage = Wage[i/2];
        if(i%2 == 0) {
        for(int f=0; f<vertices.length; f++)
            if(vertices[f].name == i) {
                for(int l=0; l<vertices.length; l++) 
                    if(vertices[l].name == Vertex[i+1])
            vertices[f].adjacencies = new Edge[] { new Edge(vertices[l], wage) };
            }
        }

        if(i%2 != 0) {
            for(int f=0; f<vertices.length; f++)
                if(vertices[f].name == i) {
                    for(int l=0; l<vertices.length; l++) 
                        if(vertices[l].name == Vertex[i-1])
                    vertices[f].adjacencies = new Edge[] { new Edge(vertices[l], wage) };
        }
        w_1 = i;

        int temp = Wage[i/2];
        if(temp < wage) { 
            wage = temp;
            if(i%2 == 0) 
                w_2 = Vertex[i+1];
            if(i%2 != 0) 
                w_2 = Vertex[i-1];
        }
        }
        }
    }

如何解决这个问题,将一些对象插入到一个数组中,而不知道有多少个对象? :)我不能使用ArrayList。

2 个答案:

答案 0 :(得分:0)

您的代码

A.adjacencies = new Edge[] { new Edge(M, 8) };

创建大小为1的数组。数组的大小在创建数组时确定,以后不能更改。如果需要,您可以创建新数组并将元素从旧数组复制到新数组。 (这是ArrayList实现的粗略描述)。

如果您事先知道阵列的大小,请执行

A.adjacencies = new Edge [size];   A.adjacencies [0] =新Edge(M,8);   ...   A.adjacencies [size-1] =新Edge(M,等等);

因为您从文件中读取,所以您应该知道数据结构的大小。大多数文件格式首先存储动态结构的大小,然后存储结构的元素。

如果您事先不知道结构的大小,那么动态数据结构(java.util.List,在您的情况下)只是合理的选择。

答案 1 :(得分:0)

创建

List<Vertext> vertexList = new ArrayList<>();

并添加了东西而不用担心限制,你可以

Vertex[] vertexArray = vertexList.toArray( new Vertex[vertexList.size()] );

一切都会奏效。

(对于未来:与List相比,基于数组的代码存在缺点 - 正如您现在已经注意到的那样。)