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

问题描述:

这里有两个类,query语句和stackov。 ArrayList用于存储查询句类的对象,但是最近添加的对象覆盖了前一个对象。如何添加对象以便它们不被覆盖?如何在java中将对象添加到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--; 
       } 

    } 
} 
+0

尝试正确缩进代码。也不需要发布两个完整的类,只需发布​​'ArrayList'操作。 – TheBronx 2013-03-12 09:00:16

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

问题不是来自你的循环但是从你的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()); 
} 
+0

作为“类型不匹配:无法从元素类型对象转换为QuerySentence”的for循环显示错误“for(QuerySentence q:doclist)” – 2013-03-12 09:13:49

+0

这是因为您已将ArrayList声明为ArrayList doclist = new ArrayList ;'。使用'ArrayList doclist = new ArrayList ();'代替。 – Rob 2013-03-12 09:16:50

+0

谢谢。这解决了我的问题 – 2013-03-12 09:21:37

指数增加这样

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

 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<QuerySentence> doclist = new ArrayList<QuerySentence>(); 

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

       for(QuerySentence sent: docList) 
       { 
        System.out.println("\nin loop : " + sent.label + sent.query); 
       } 

     }