如何在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--;
}
}
}
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
并为它们创建getters
和setters
。有了这个你for-statement
应该是这样的:不需要
for(QuerySentence q : doclist)
{
System.out.println("In loop : " + q.getLabel() + q.getQuery());
}
作为“类型不匹配:无法从元素类型对象转换为QuerySentence”的for循环显示错误“for(QuerySentence q:doclist)” – 2013-03-12 09:13:49
这是因为您已将ArrayList声明为ArrayList
谢谢。这解决了我的问题 – 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);
}
}
尝试正确缩进代码。也不需要发布两个完整的类,只需发布'ArrayList'操作。 – TheBronx 2013-03-12 09:00:16