相同的元素插入到java中的LinkedList中

时间:2013-10-15 10:19:52

标签: java linked-list

当我创建一个LinkedList并插入一个新元素时,每次都会插入新元素,但是当我将元素出列时,我只得到最后插入的元素。我的代码在JAVA中是这样的。

import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
    public static void main(String[] args) throws IOException {
        int i,j,k,l,m,n,t;
        LinkedList q = new LinkedList();
        arc c = new arc();
        c.start = 1;
        c.end  =1 ;
        q.add(c);

        arc d = new arc();
        d.start = 2;
        d.end = 2;
        q.add(d);

        arc a1 = (arc) q.get(0);
        arc a2 = (arc) q.get(1);
        System.out.println(a1.start);
        System.out.println(a2.start);
    }
    public static class arc
    {
        public static int start;
        public static int end;
    }
}

所需的输出是1和2,但我得到2和2.有人可以帮助我解决这个问题。谢谢。

5 个答案:

答案 0 :(得分:3)

因为您在arc中设置静态变量。静态变量是类变量,而不是实例变量。所以arc的所有实例都会为类变量赋予相同的值。

试试这个:

public static class arc
    {
        public int start;
        public int end;
    }

实际上相同的元素没有插入列表中,两个不同的元素(实例)正在列表中插入,但是你要从两个实例中打印类变量值。

答案 1 :(得分:1)

arc类中的字段是静态的。我会开始使用一个好的IDE,比如Eclipse,这样你就会收到类似错误的警告。 此外,您的代码还有很多需要改进的地方。例如,为什么要使用静态弧类?看起来你不打算从外部类外部静态地使用这个类。 您还应该使用泛型并大写arc类的名称。

答案 2 :(得分:0)

从arc类的start和end的定义中删除static,否则start和end将是类级变量。

refer to difference between static and non static

答案 3 :(得分:0)

看看你的代码:

public static class arc
{
    public static int start;
    public static int end;
}

您的开始和结束变量是静态的,因此任何弧对象只有一个开始和结束变量。

只需删除静态修改器,它就可以工作。

答案 4 :(得分:0)

您正在使用静态变量进行开始和结束。将两个类分成两个源文件并删除静态:

public class Lala {
    public static void main(String[] args) throws IOException {
        int i, j, k, l, m, n, t;
        LinkedList q = new LinkedList();
        arc c = new arc();
        c.start = 1;
        c.end = 1;
        q.add(c);

        arc d = new arc();
        d.start = 2;
        d.end = 2;
        q.add(d);

        arc a1 = (arc) q.get(0);
        arc a2 = (arc) q.get(1);
        System.out.println(a1.start);
        System.out.println(a2.start);
    }

}

arc.java:

public class arc
    {
        public int start;
        public int end;
    }