Подтвердить что ты не робот

Использование содержит в Java ArrayList <String>

Если у меня есть ArrayList из String, являющийся частью класса в Java, например:

private ArrayList<String> rssFeedURLs;

Если я хочу использовать метод в классе, содержащем вышеуказанный ArrayList, используя ArrayList, чтобы проверить, содержится ли String в этом массиве ArrayList, я считаю, что я должен сделать это следующим образом:

if (this.rssFeedURLs.contains(rssFeedURL)) {

Где rssFeedURL - это строка.

Я прав или неправ?

4b9b3361

Ответ 1

Вы правы. Тест ArrayList.contains() равен(), а не идентификатору объекта:

возвращает true тогда и только тогда, когда этот список содержит по крайней мере один элемент e такой что (o == null? e == null: o.equals(e))

Если вы получили исключение NullPointerException, убедитесь, что вы инициализировали свой список, либо в конструкторе, либо в объявлении. Например:

private List<String> rssFeedURLs = new ArrayList<String>();

Ответ 2

Да, это должно работать для строк, , но если вы беспокоитесь о дубликатах, используйте Set. Эта коллекция предотвращает дублирование без необходимости делать что-либо. A HashSet в порядке, но он неупорядочен, поэтому, если вы хотите сохранить порядок вставки, вы используете LinkedHashSet.

Ответ 3

Вы правы, что он должен работать; возможно, вы забыли что-то создать. Ваш код выглядит примерно так?

String rssFeedURL = "http://stackoverflow.com";
this.rssFeedURLS = new ArrayList<String>();
this.rssFeedURLS.add(rssFeedURL);
if(this.rssFeedURLs.contains(rssFeedURL)) {
// this code will execute
}

Для справки обратите внимание, что следующее условие будет также выполняться, если вы добавите этот код к указанному выше:

String copyURL = new String(rssFeedURL);
if(this.rssFeedURLs.contains(copyURL)) {
// code will still execute because contains() checks equals()
}

Несмотря на то, что (rssFeedURL == copyURL) является ложным, rssFeedURL.equals(copyURL) истинно. Метод contains заботится об эквивалентном методе.

Ответ 4

Возможно, вам нужно опубликовать код, вызвавший ваше исключение. Если это все, что у вас есть, возможно, вы просто не смогли инициализировать массив.

Использование здесь здесь должно работать.

Ответ 5

Ваш вопрос не очень понятен.

  • Что именно делает ваш код? Дайте больше кода.
  • Какая ошибка вы получаете?

Вы говорите, что получаете нулевой указатель. Вы не можете получить нулевой указатель как значение, возвращаемое contains().

Однако вы можете получить NullPointerException, если ваш список не был инициализирован. Читая свой вопрос сейчас, я бы сказал, что то, что вы здесь показываете, является правильным, но, возможно, вы просто не создали экземпляр списка.

Для этого (чтобы добавить URL-адрес фида, если он еще не указан в списке):

if (!this.rssFeedURLs.contains(rssFeedURL)) {
    this.rssFeedURLs.add(rssFeedUrl);
}

то это выражение будет делать:

private ArrayList<String> rssFeedURLs = new ArrayList<String>();

или инициализировать свой список позже, но прежде чем пытаться получить доступ к его методам:

rssFeedUrls = new ArrayList<String>();

Наконец... Вам действительно нужен List? Может быть, Set будет лучше, если вы не захотите дублировать. Используйте <<27 > , если сохранить порядок.

Ответ 6

Правильно... со строками... когда вы отклоняетесь от примитивов или строк, все меняется, и вам нужно реализовать hashcode/equals, чтобы получить желаемый эффект.

EDIT: Инициализируйте свой ArrayList<String>, затем попытайтесь добавить элемент.

Ответ 7

Ты прав. Как говорили другие, согласно вашим комментариям, вы, вероятно, не инициализировали свой ArrayList.

Моя точка зрения другая: вы утверждали, что проверяете дубликаты, и поэтому вы вызываете метод contains. Попробуйте использовать HashSet. Он должен быть более эффективным - если вам не нужно сохранять порядок URL-адресов по какой-либо причине.

Ответ 8

Спасибо всем, кто так быстро ответил. Я всегда мог использовать набор, но теперь у меня есть ArrayList. Проблема заключалась в том, что в конструкторе класса, содержащего ArrayList, я не говорил:

public RSS_Feed_Miner() {
    ...
    this.rssFeedURLs = new ArrayList<String>();
    ... 
}

D'Oh! в пятницу днем.

Ответ 9

ArrayList<String> newlyAddedTypes=new ArrayList<String>();

.....

newlyAddedTypes.add("test1");

newlyAddedTypes.add("test1");

newlyAddedTypes.add("test2");

if(newlyAddedTypes.contain("test"){
//called here
}
else{

}

Ответ 10

В приведенном ниже коде мы заданы как arraylist, retrieveTaskidForDelete как метод, по которому мы добавляем значение в заполненный заданием arraylist, а checkid - String.we нужно проверить, содержит ли строковое значение в arraylist.

String checkid;
ArrayList<String> taskfilled=retrieveTaskidForDelete();
                if(!taskfilled.contains(checkid)) {
                    Toast.makeText(getContext(),"Yepiee 
 Bingo"+ti.get(a),Toast.LENGTH_SHORT).show();
                }