将元素添加到列表会删除以前的元素

时间:2015-12-11 14:03:14

标签: java list arraylist

我有一个带有返回对象的构造函数的类。我正在将这些对象添加到列表中,但是遇到了麻烦,因为每次我添加一个新元素时,它都会用我正在添加的当前元素替换之前的元素。

以下是列表和输出:

    Objects a = new Objects("test1");
    Objects b = new Objects("test2");

    List<Objects> c = new ArrayList();

    c.add(a);
    c.add(b);
    System.out.println(c.get(0).getTest());
    System.out.println(c.get(1).getTest());

这是输出:

test2
test2

这是创建/返回对象的类:

public class Objects
{
    public static String test;

    public Objects (String test)
    {
        this.test = test;
    }

      public String getTest()
      {
          return test;
      }
}

5 个答案:

答案 0 :(得分:2)

删除Objects中类成员test的静态内容:

public class Objects
{
    public String test;

    public Objects (String test)
    {
        this.test = test;
    }

      public String getTest()
      {
          return test;
      }
}

然后你会得到所需的输出:

  

Test1

     

的Test2

有时,您希望拥有所有对象共有的变量。这是通过静态修改器完成的。在声明中具有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。

答案 1 :(得分:1)

静态是这里的问题。删除静态,它将正常工作。使用像这个示例的静态不是一个好习惯,请阅读here

答案 2 :(得分:0)

static更改为private static int i = 0;

Java中的i++关键字意味着变量或函数在该类的所有实例之间共享,因为它属于该类型,而不是实际的对象本身。

因此,如果您有一个变量:AppCompatActivity并在一个实例中递增它(<android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" > </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/vp_main" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" android:visibility="visible"> </android.support.v4.view.ViewPager> ),则更改将反映在所有实例中。我现在在所有情况下都是1。

Read

答案 3 :(得分:0)

public static String test;

这就是问题所在。 test是类级变量,因此您只需修改它,而不是创建新的变量。此外,通常您将变量设为私有,并为变量提供getter和setter。这称为encapsulation

答案 4 :(得分:0)

由于您已将test声明为静态,因此所有Objects个实例都将使用相同的变量。所以它不会覆盖列表中的对象。它覆盖了test的价值。

解决方案:

  

删除静态修改器   public String test;