Проверьте, содержит ли ArrayList <String> часть строки

java arraylist

14408 просмотра

5 ответа

522 Репутация автора

Скажем, у меня есть ArrayList:

<string1.4>
<string2.4>
<string3.4>

и я хочу вернуть первый элемент arrayList, когда я говорю arrayList.containsSubString ('string1'); Как это можно сделать, кроме как перебирать каждый из элементов arrayListи проверять, string1является ли подстрока строки этого элемента?

Автор: TookTheRook Источник Размещён: 21.06.2011 03:35

Ответы (5)


12 плюса

343863 Репутация автора

Решение

Единственный способ, которым я могу думать, это сделать что-то вроде:

strs.get(strs.indexOf(new Object() {
    @Override
    public boolean equals(Object obj) {
        return obj.toString().contains(s);
    }
}));

Не знаю, считается ли это хорошей практикой.

Автор: aioobe Размещён: 21.06.2011 03:38

1 плюс

3247 Репутация автора

Не могу. Даже если был эквивалент List.contains (), он просто выполняет линейный поиск.

Автор: jiggy Размещён: 21.06.2011 03:40

1 плюс

96333 Репутация автора

Я думаю, что повторение списка и проверка каждого элемента - самый быстрый способ. И это также способ, которым каждый понимает ваш код. (кроме построения собственной структуры данных).


В любом случае вы также можете использовать org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)

find(java.util.Collection collection, Predicate predicate) Находит первый элемент в данной коллекции, который соответствует данному предикату.

Автор: Ralph Размещён: 21.06.2011 03:40

5 плюса

7259 Репутация автора

С ArrayList нет другого варианта, кроме как перебирать его. Но вы можете использовать другие структуры данных, такие как дерево префиксов (например, троичное дерево поиска , см. Этот пример Java ).

Автор: morja Размещён: 21.06.2011 03:41

0 плюса

463335 Репутация автора

Вы можете использовать NavigableSet

NavigableSet<String> set = new TreeSet<String>();
// add strings

String find =
String firstMatch = set.ceiling(find);
Автор: Peter Lawrey Размещён: 21.06.2011 03:51
Вопросы из категории :
32x32