尽管添加了String ArrayList,但String对象的大小仍保持为0

时间:2016-04-11 17:05:35

标签: java android arraylist parceler

我创建了一个名为energy_vs_volume.dat" using 1:(P($1)) > file.txt的自定义类,其中包含3个Song变量,String个变量和intArrayList项。

现在我为所有变量提供了正确的getter和setter,但是问题在于,当我为String变量赋值并稍后尝试访问它时,它会抛出{{1错误,因为它的大小是0.以下是有问题的代码。

我是否可能无法正确分配变量,或者可能清除其内存位置?

重要提示:我可以访问并打印其他变量的值,但ArrayList变量是唯一失败的变量。

SongClass.java

IndexOutOfBounds

SongReader.java

ArrayList

SongDisplay.java

@Parcel
public class SongClass {
    //Other variables defined here
    ArrayList <String> verses;

    public Song() { /*Required empty bean constructor*/ }

    public Song(String var1, String var2, String var3, int var4, ArrayList<String> verses) 
    {
        this.var1= var1;
        this.var2= var2;
        this.var3= var3;
        this.var4= var4;
        this.verses = verses;
    }

    //Getters and Setters below

5 个答案:

答案 0 :(得分:2)

您的评论是正确的。由于您传递给歌曲的ArrayList和您调用ArrayList的{​​{1}}是相同的对象,因此它们都会被清除。

如果您需要清除clear()将新ArrayList传递到复制ArrayList内容的Song构造函数中。

verses

另外,请注意java中的数组和列表从索引0开始,因此您也应该修复for循环。

songs.add(new Song(String var1, String var2, String var3, int var4, new ArrayList(verses));

答案 1 :(得分:1)

问题是你在ArrayList引用中调用了clear。 当你调用songs.add并将经文传递给它并清除它时,你正在清理参考文献。

你必须实例化你传递给songs.add的数组,如下所示:

ArrayList<String> auxVerses = new ArrayList<>(verses);

songs.add(new Song(String var1, String var2, String var3, int var4, auxVerses);

答案 2 :(得分:1)

因为语句

时声明的verses ArrayList为空
private ArrayList<String> verses = new ArrayList<>(10); 

通过new ArrayList<>(10);,您不是要创建一个包含10个元素的新ArrayList,而不是仅仅定义初始容量。因此verses为空,verses.size()为0。

即使你不打电话给verses.clear();,它仍然是空的。

另一个明确的例子

List<String> list = new ArrayList<String>(10);
System.out.println(list.size());// print '0'
list.add("A");
System.out.println(list.size());// print '1'
list.clear();
System.out.println(list.size());// print '0'

答案 3 :(得分:0)

verses.clear();  

由于这行代码,您将获得数组列表大小为0.

答案 4 :(得分:0)

请记住,调用private ArrayList<String> verses = new ArrayList<>(10);不会创建一个包含10个新&#34;空&#34;的ArrayList。项目。它只是设置List的最大容量。因此,如果您尝试访问任何项目,您将无法获得任何类型的空值或空值,因为您实际上未向列表添加任何内容。你确保它已经为10件物品留出了记忆。因此,在此列表中调用ArrayList.size()将正确地报告零项。