java - 如何在java中将对象添加到ArrayList

标签 java oop arraylist

这里有两个类,query sentence和stackov。一个arraylist用来存储query语句类的对象,但是最近添加的对象覆盖了之前的对象,如何添加对象才不会被覆盖?

QuerySentence.java

public class QuerySentence {

    public static String query;
    public static String label;
    public QuerySentence(){

    }
    public QuerySentence(String query,String label){
        this.query = query;
        this.label = label;
    }
}  

Stackov.java

package QueryClassifier;

import java.util.ArrayList;

public class stackov {

    public static void main(String args[])
    {
        QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");
        QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");
        ArrayList<Object> doclist = new ArrayList<Object>();

            doclist.add(0,qs1);
            doclist.add(1,qs2);

            int size = doclist.size();
               while(size>0)
               {
                    QuerySentence qs3 = (QuerySentence) doclist.get(size-1);
                    System.out.println("\nin loop : " + qs3.label + qs3.query);
                    size--;
                }

    }
}   

最佳答案

问题不是来自您的循环,而是来自您的类QuerySentence。您正在创建静态对象,这意味着您不会为类的不同实例创建不同的字段,但该类将只有它们的唯一副本。 那么这里发生了什么,您将这些值分配给您的类 QuerySentence :

QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");

然后用这个擦掉它:

QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");

当您将两个对象添加到您的ArrayList 时,当然在您的循环中您将打印两个结果。但只有qs2中的结果。从您的字段声明中删除 static ,它将正常工作:

public String query;
public String label;

您不需要在添加时为您的查询语句编制索引。

doclist.add(qs1);
doclist.add(qs2);

而且您还可以改进循环。你可以这样做:

ArrayList<QuerySentence> doclist = new ArrayList<QuerySentence>();

// some code...

for(QuerySentence q : doclist)
{
    System.out.println("In loop : " + q.label + q.query);
}

还请记住 Java 约定:您的类应以大写字母开头 (Stackov)。如果您还致力于封装,最好将您的字段声明为 private 并为它们创建 getterssetters。有了这个你的 for-statement 应该是这样的:

for(QuerySentence q : doclist)
{
    System.out.println("In loop : " + q.getLabel() + q.getQuery());
}

关于java - 如何在java中将对象添加到ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15356889/

相关文章:

java - 在AndroidX中弃用setUserVisibleHint时加载数据

oop - 为什么依赖注入(inject)比使用工厂更好?

java - 为什么必须在类中而不是接口(interface)中定义方法?

c++ - 未封装意味着不可更改?

带有循环对象的Java ArrayList

java - ArrayList.remove 不在循环中工作

java - 从 ArrayList 中删除某个字符串找到的第一个元素?

java - 如何处理 RecyclerView 项目 onClick,如果它对多个 Activity 使用单个适配器类

java - Java中如何按两个字段排序并指定排序方向?

java - 继承方法和公共(public)方法有什么区别?