数组元素作为java中的链表

时间:2012-10-14 20:35:21

标签: java arrays linked-list

我有一个家庭工作,我用数组和数组的元素是链表,因为连续的元素没有固定需要删除或添加一些时间取决于问题条件,我在下面试过这些代码,但我有将新元素添加到固定行时的问题,例如p [0],将为所有人添加该值,如何解决此问题请帮忙。

public class schedule
{
   public class link
   {
     public LinkedList <Integer>list = new LinkedList<Integer>() ;
     public link(LinkedList<Integer> value)
    {
        list = value;
    }
    public link(int value)
    {
        list.add(Integer.valueOf(value)) ;
    }

}


private link p[] = new link[10];
public schedule()
{
    LinkedList<Integer> l = new LinkedList<Integer>();
    l.add(Integer.valueOf(2));
    l.add(Integer.valueOf(0));
    l.add(Integer.valueOf(3));
    for(int j=0;j<p.length;j++)
        p[j] = new link(l);



    p[0].list.add(9); // here I  have problem

    for(int j=0;j<p.length;j++)
    {
        System.out.print("p["+j+"]:");
        for(int i=0;i<p[j].list.size();i++)
            System.out.print(p[j].list.get(i).intValue());
        System.out.println();
    }

}
public static void main(String []arg)
{
    new schedule();
}


the output is like this : the value 9 added to all but I want to be added just for first element
p[0]:2039
p[1]:2039
p[2]:2039
p[3]:2039
p[4]:2039
p[5]:2039
p[6]:2039
p[7]:2039
p[8]:2039
p[9]:2039

1 个答案:

答案 0 :(得分:1)

问题是您使用相同的link初始化每个LinkedList<Integer>个实例:

LinkedList<Integer> l = new LinkedList<Integer>();
l.add(Integer.valueOf(2));
l.add(Integer.valueOf(0));
l.add(Integer.valueOf(3));
for(int j=0;j<p.length;j++)
//it will be the same LinkedList<Integer> l per all the instances in the array
    p[j] = new link(l);

请注意,执行此操作时,每个link实例的list属性都会引用相同的LinkedList<Integer> l变量。因此,如果您在一个地方修改它,每个人都将更新(因为它是相同的参考)。

有很多方法可以解决这个问题:

  • 在for循环的每次迭代中创建一个新的LinkedList。
  • 使用其他构造函数创建新的link实例。
  • 逐个填写link[] p数组......