Я использовал следующий метод, чтобы добавить свои данные в 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.

После добавления данных я хочу найти позицию любого идентификатора, который я хочу найти в ArrayList.…

int position = wordList.indexOf(id);

А также

int position = wordList.lastIndexOf(id);

В результате оба кода всегда генерировали "position = -1". Как я могу это сделать?

Отредактировано

Это код класса 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;
    }
}
1
sldroid 4 Сен 2016 в 18:51

4 ответа

Лучший ответ

indexOf пытается сравнить объекты Word. Ваш список не содержит идентификаторов в качестве элементов, поэтому вы получите -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
    }
} 

Примечание: это будет искать по всему списку, чтобы найти последний индекс этого идентификатора. Поэтому, если есть дубликаты и вам нужен только первый (или остановите цикл, как только найдете то, что хотите), добавьте break в оператор if.

7
OneCricketeer 28 Авг 2017 в 05:39
  1. Реализуйте метод equals в объекте «Word». Внутри метода equals вы можете применить equals только к полю id.

  2. Создайте новый объект Word с этим идентификатором и передайте этот объект в indexOf. Не передавайте идентификатор в indexOf. Передайте новый из существующего объекта Word с требуемым идентификатором.

Затем indexOf вернет действительный индекс этого объекта слова.

1
Ankit Bhatnagar 4 Сен 2016 в 16:06

Для поиска объекта в списке. вам нужно переопределить метод equals в вашем классе Word. в противном случае вы получите -1. потому что indexOf внутренне используется метод equals для поиска элемента в списке.

0
Rajadurai K 4 Сен 2016 в 17:28

Класс внутри вашего списка должен реализовывать hashcode () и equals (), чтобы indexOf () работал.

-1
YMomb 4 Сен 2016 в 15:57