Итерация по хэш-карте

Возможный дубликат:
Как перебирать каждую запись на карте?
Как мне перебрать карту ‹String, POJO›?

Я написал следующий фрагмент кода и застрял в повторении хэш-карты.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

class demo
{
    public static void main(String v[]) {
        ArrayList<String> contactIds = new ArrayList<String>();
        contactIds.add("2");
        contactIds.add("3");

        HashMap names = new HashMap();
        names =  getNames(contactIds);

        // I want to get the total size of the hashmap  - names
        // for ex now there are 6 elements inside hashmap.
        // How can I get that count?

    }


    private static HashMap getNames(ArrayList contactIds) {
        HashMap names = new HashMap();
        String params = null;
        List<String> list = new ArrayList<String>();
        for(int i=0; i<contactIds.size();i++) {
            params = contactIds.get(i).toString();

            list.add(0,"aer-1");
            list.add(1,"aer-2");
            list.add(2,"aer-3");

            names.put(params,list) ;
         }

        return names;
    }
}

В этом коде внутри карты есть шесть элементов, теперь в основном методе, как я могу перебрать карту и получить общее количество?

Спасибо.


person nithin    schedule 13.01.2013    source источник


Ответы (3)



Взгляните на JavaDoc. Вы ищете HashMap.size() для общего количества и HashMap.values() для всех значений на карте или HashMap.entries() для каждой пары ключ-значение.

person SimonC    schedule 13.01.2013

Структура данных «Карта» не является объектом «Коллекция», а является «Набором».

Наиболее распространенный метод перебора карты — использование базового метода .entrySet.

// For each loop
for ( Entry<String, String> entry : names ) {
    System.out.println( String.format( "(%s, %s)", entry.getKey(), entry.getValue() ) );
}

// Iterator
Iterator iterator = names.entrySet().iterator
while( iterator.hasNext() ){
     Entry entry = iterator.next()
     System.out.println( String.format( "(%s, %s)", entry.getKey(), entry.getValue() ) );
}

Если вас интересует общее количество узлов Map, используйте метод .size().

РЕДАКТИРОВАТЬ:

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

Iterator iterator = names.entrySet().iterator
int count = 0;

while( iterator.hasNext() ){
     Entry entry = iterator.next()
     count += entry.getValue().size()
}
person Dan    schedule 13.01.2013
comment
но как я могу получить общее количество элементов внутри хэш-карты. например, для ключа 1 и ключа 2 добавлено 3 элемента. Теперь мне нужен общий размер, т.е. 6. Является ли это возможным ? - person nithin; 13.01.2013
comment
нет метода с именем size() - person nithin; 15.01.2013
comment
Какую структуру данных вы используете для значений на карте? В вашем коде это выглядит как ArrayList, который представляет собой структуру данных коллекции, поэтому он должен иметь метод .size(). - person Dan; 15.01.2013