如何在java中使用方法来存储arraylist中的信息

时间:2017-04-09 06:43:32

标签: java arrays arraylist

对于我正在做的项目,我想使用一个单独的类来存储arraylist中各种人的信息。在这种情况下,该方法将包含一个字符串的arraylist来存储我的所有信息。当我尝试这样做时,我意识到每次我运行storage向arraylist添加一个字符串时,它都会从arraylist中删除所有先前的信息。

是否可以这样做,以便字符串Hello, How Are You?I'm fine. How Are You?添加到类two中的数组,而不会在重新运行该方法后重置数组?

public class one
{
    public static void main (String [] args)
    {
        two t = new two();

        t.storage("Hello, How Are You?");
        t.storage("I'm fine. How Are You?");
    }
}
import java.util.ArrayList;
public class two
{
    public static void storage(String toBeAdded)
    {
        ArrayList<String> al = new ArrayList<String>();

        al.add(toBeAdded);
        System.out.println(al);
    }
}

给定输出:

[Hello, How Are You?] [I'm fine. How Are You?]

预期产出:

[Hello, How Are You?] [Hello, How Are You?, I'm fine. How Are You?]

4 个答案:

答案 0 :(得分:2)

有两种方法可以解决您的问题:

选项(1):您当前的 ArrayList范围是storage方法的本地,因为您正在创建品牌{{1}每个调用new方法{},ArrayList,但您需要的是类级别的storage() static对象,如下所示,但因为您正在调用{{ 1}}使用对象的方法,这不是更好的选项(在下面清楚地解释),编译器已经发出警告,你忽略了它。

ArrayList

选项(2)(首选):删除storage()范围,并将public class two { private static ArrayList<String> al = new ArrayList<String>(); public static void storage(String toBeAdded) { al.add(toBeAdded); System.out.println(al); } } 声明为实例变量,如下所示(更喜欢此选项),因为您正在调用使用不需要的对象引用的static方法会造成混淆。

ArrayList<String>

始终确保使用classname(如Two.storage())调用 static变量/方法而不创建任何对象,因为它们是类级别成员,即它们不适用于单个对象。我强烈建议您阅读this并更清楚地理解这个主题。

除了上述重点之外,请始终确保遵循Java 命名标准,因为类名称应以您违反的大写字母开头。

答案 1 :(得分:2)

不要将ArrayList声明为局部变量,而是将其用作字段。同时使方法非静态

public class two
{

    private ArrayList<String> al = new ArrayList<String>();
    public void storage(String toBeAdded)
    {

        al.add(toBeAdded);
        System.out.println(al);
    }
}

答案 2 :(得分:1)

您的错误

每次调用storage()方法时,您都要创建一个新的&#39; ArrayList&#39;。

解决方案

所以,创建一个类two的对象,并将其与字符串一起传递给方法storage()

import java.util.ArrayList;
    public class one
    {
        public static void main (String [] args)
        {
            two t = new two();

            t.storage(t,"Hello, How Are You?");
            t.storage(t,"I'm fine. How Are You?");
        }
    }

     class two
    {
         ArrayList<String> al = new ArrayList<String>();
        public static void storage(two object,String toBeAdded)
        {


            object.al.add(toBeAdded);
            System.out.println(object.al);
        }
    }

答案 3 :(得分:0)

在您的班级two中方法问题storage您的逻辑不正确每次调用存储来保存新字符串时,您都会创建新的arraylist al,这将删除之前的所有字符串static旧arraylist中的信息。

解决在第二类中定义public class two { public static ArrayList<String> al = new ArrayList<String>(); public void storage(String toBeAdded) { al.add(toBeAdded); System.out.println(al); } } arraylist并通过方法存储向其添加信息:

storage

注意:同样static方法也不应该是two方法,因为您正在创建类storage的对象并通过此对象调用方法,所以如果你尝试测试它会给你警告:

  

访问静态方法存储

警告您尝试访问类t的对象two中的静态方法ClassName.MethodName() 的原因。

当你在类中声明静态方法时,正确的方法是调用它:

two.storage("Hello, How Are You?");
two.storage("I'm fine. How Are You?");
在你的例子中

date