如何在ArrayList

时间:2016-09-04 15:51:27

标签: java arraylist

我使用以下方法将我的数据添加到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;
    }
}

4 个答案:

答案 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)

  1. 在“Word”对象中实现equals方法。在equals内部方法中,您只能将id等于id字段。

  2. 使用该id创建一个新的Word对象,并在indexOf中传递该对象。不要在indexOf中传递id。传递具有所需ID的现有Word对象的新内容。

  3. 然后indexOf将返回该单词对象的有效索引。

答案 2 :(得分:0)

用于搜索列表中的对象。您需要在Word类中重写equals方法。否则你会得到-1。因为indexOf在内部使用equals方法来搜索列表中的元素。

答案 3 :(得分:-1)

列表中的类应实现hascode()和equals(),以使indexOf()有效。

相关问题