当前位置: 首页 > 知识库问答 >
问题:

如何在Java中将对象添加到ArrayList中

韩涵衍
2023-03-14

这里有两个类,查询语句和Stackov。arraylist用于存储查询语句类的对象。但是最近添加的对象覆盖了前一个对象。如何添加对象以使它们不被覆盖?

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--;
                }

    }
}   

共有1个答案

乌骏
2023-03-14

问题不是来自您的循环,而是来自您的类querystenting。您正在创建静态对象,这意味着您不会为类的不同实例创建不同的字段,但类将只有它们的唯一副本。这里所发生的事情是,您将这些值赋给您的类QueryStenting:

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());
}
 类似资料:
  • 问题内容: 我想向中添加一个对象,但是每次我向具有3个属性的新对象添加时,都会出现错误。 在这里,我正在尝试创建其对象并将其传递给的类。 问题答案: 创建对象时需要使用运算符 要不然 并且您的构造函数不应包含。否则它将成为您班上的一个方法。

  • 我想编写一个名为addNewPhone(Phone newPhone)的方法,将一个Phone添加到一个电话数组列表中; 电话类别: 车间类别: 主要类: 我知道我需要返回ArrayList,并且我需要在这个方法中接收Phone type对象,然后它应该返回ArrayList和一个新的phones,但我不知道为什么它不起作用。 Eclipse显示我符合的方法:“newPhone无法解析或未归档”。

  • 我的任务是实现一个蛮力算法来输出一些n的整数[1,2,…, n]的所有排列。但是,我似乎在将ArrayList对象添加到HashSet时遇到了一些问题: 我发现对“nextPer的连续调用确实找到了所有排列,但是我不明白当我将排列添加到HashSet“allPer的排列”时会发生什么。我在n=3的情况下运行时得到的输出是这样的: [[3, 2, 1, 1, 2, 1, 1, 3, 1, 2], [

  • 我需要做一个方法,可以添加这些数据类型到一个arraylist内的cart类。但如果我写 它只会接收推车类型的数据,所以我不能输入食物或饮料,或Miscs类型的数据,甚至有相同的细节,如名称和价格。

  • 问题内容: 我有一个特定的类C的arraylist。 C类具有两个属性,即。 现在,当我将C类型的对象添加到ArrayList myList时,我想检查列表中是否已经存在对象,且其str1和str2的值与该对象的参数值(str1和str2)相匹配我要补充。 有什么有效的方法可以执行此操作,而不必每次都遍历完整列表并检查参数之间是否匹配? 问题答案: 您需要重写C类中的方法。 例如 然后,可以调用m

  • 我有“BaseProduct”类--抽象的,“food”类--实现了BaseProduct,还有一个“推车”,里面放了很多食物。 类食品如下所示: 类“cart”(购物车)如下所示: