В двух словах, я хочу перебрать HashMap и проверить, сохранено ли конкретное имя в каком-либо из списков. Так как я могу это сделать?
Есть два способа итерации по карте, которые могут быть здесь интересны. Во-первых, вы можете выполнить итерацию по всем сопоставлениям (то есть парам отношений ключ-значение), используя метод entrySet () , который позволит вам узнать, какой ключ есть у каждого массива. Кроме того, если вам не нужен ключ, вы можете просто получить все списки по очереди с помощью метода values()
. Использование первой опции может выглядеть примерно так:
for (Map.Entry<String, ArrayList<String>> entry : theAccused.entrySet())
{
String sListName = entry.getKey();
ArrayList<String> saAccused = entry.getValue();
if (saAccused.contains(sAccuser))
{
// Fire your logic for when you find a match, which can
// depend on the list's key (name) as well
}
}
Чтобы ответить на более широкие вопросы - интерфейс Set просто представляет (неупорядоченный) набор недублированных значений. Как вы можете видеть по связанному Javadoc, есть доступные методы, которые можно ожидать для такой неупорядоченной коллекции. Итератор - это объект, который пересекает некоторую структуру данных, представляя каждый элемент по очереди. Типичное использование итератора будет выглядеть примерно так:
Iterator<?> it = ...; // get the iterator somehow; often by calling iterator() on a Collection
while (it.hasNext())
{
Object obj = it.next();
// Do something with the obj
}
то есть проверьте, не исчерпан ли итератор (имеет больше элементов), затем вызовите метод next()
, чтобы получить этот элемент. Однако, поскольку вышеприведенный шаблон является настолько распространенным, его можно исключить с помощью foreach loop в Java 5, избавляя вас от работы с самим итератором, как я использовал в своем первом примере.