Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Коллекции


Автор: DCoder 27.9.2009, 19:54
Всем доброго времени суток!

1. Не мог бы кто-нибудь объяснить в чём разница между классами HashTable и HashMap?
2. Как правильнее перебирать элементы коллекции (ну возьмём для определённости класс ArrayList): через метод get в цикле от первого индекса до последнего или через итератор?

Автор: revenforv 27.9.2009, 19:58
Посмотрите в эту сторону.. думаю лучше чем в документации вы объяснения не найдете.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html

Добавлено через 1 минуту и 28 секунд
В частности, вот цитата оттуда же:
Цитата

Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null key. (The HashMap  class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.) This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time. 

Автор: GZep 27.9.2009, 22:23
Код

for (Object key: hMap.keySet()) {
    System.out.println(hMap.get(key));
}

Код

for (Map.Entry<int, String> entry: hMap.entrySet()) {
    System.out.println(entry.getValue());
}

Автор: Dims 28.9.2009, 18:56
Цитата(DCoder @  27.9.2009,  19:54 Найти цитируемый пост)
2. Как правильнее перебирать элементы коллекции (ну возьмём для определённости класс ArrayList): через метод get в цикле от первого индекса до последнего или через итератор? 

Всё равно. В документации написано "The size, isEmpty, get, set, iterator, and listIterator operations run in constant time.", то есть, при выполнении get() последовательного сканирования по списку не происходит. Следовательно, аппаратно происходит косвенная адресация и быстрее уже никак невозможно. Итератор внутри делает либо то же самое, либо столь же затратную операцию.

Автор: magicfly 28.9.2009, 19:16
идеологически верно юзать
Код

for (Object obj:objectCollection)
{
//obj.action()
}
 
либо
Код

(Iterator<Object>it=objectCollection.iterator();;it.hasNext())
{
Object obj=it.next();
}

Предпочтение лучше отдать первому 

Автор: DCoder 2.10.2009, 19:34
Извиняюсь за долгое отсутствие... Почему-то не пришло уведомление об ответе с форума.

Видимо мне нужно было внимательнее читать документацию.  smile Спасибо, коллеги!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)