我使用以下方法将我的数据添加到ArrayList。
ArrayList<Word> wordList = new ArrayList<Word>();
Word word = new Word();
word.set_id(id);
word.setWord(word);
word.setDefinition(definition);
wordList.add(word);
添加一些数据后,我想找到我想在ArrayList中找到的任何id的位置。
我已经尝试过以下方法来获取id的位置。但它没有用。
int position = wordList.indexOf(id);
和
int position = wordList.lastIndexOf(id);
两个代码总是生成&#34; position = -1&#34;结果是。我怎么能这样做?
被修改
这是Word.java类的代码。我该如何实现平等的方法?
public class Word {
private String _id, word, definition, favourite, usage;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public String getDefinition() {
return definition;
}
public void setDefinition(String definition) {
this.definition = definition;
}
public String getFavourite() {
return favourite;
}
public void setFavourite(String favourite) {
this.favourite = favourite;
}
public String getUsage() {
return usage;
}
public void setUsage(String usage) {
this.usage = usage;
}
}
答案 0 :(得分:5)
indexOf
正在尝试比较Word对象。您的列表不包含id作为元素,因此您得到-1。
您需要使用循环并搜索列表。
int id = 3;
int position = -1;
for (int i = 0; i < wordlist.size(); i++) {
if (wordlist.get(i).getId() == id) {
position = i;
// break; // uncomment to get the first instance
}
}
注意:这将搜索整个列表以查找该id的最后一个索引。因此,如果存在重复项并且您只想要第一个(或者在找到所需内容后立即停止循环),请在if语句中添加break
。
答案 1 :(得分:1)
在“Word”对象中实现equals方法。在equals内部方法中,您只能将id等于id字段。
使用该id创建一个新的Word对象,并在indexOf中传递该对象。不要在indexOf中传递id。传递具有所需ID的现有Word对象的新内容。
然后indexOf将返回该单词对象的有效索引。
答案 2 :(得分:0)
用于搜索列表中的对象。您需要在Word类中重写equals方法。否则你会得到-1。因为indexOf在内部使用equals方法来搜索列表中的元素。
答案 3 :(得分:-1)
列表中的类应实现hascode()和equals(),以使indexOf()有效。