Программирование на Java




Конкретные классы коллекций - часть 3


Hashtable ht = new Hashtable(1000,0.60)

Существует также конструктор без параметров, который использует значения по умолчанию 101 для размера массива (в последней версии значение уменьшено до 11) и 0.75 для коэффициента загрузки.

Использование алгоритма хэширования позволяет гарантировать, что скорость доступа к элементам коллекции такого типа будет увеличиваться не линейно, а логарифмически. Таким образом, при частом поиске каких-либо значений по ключу имеет смысл задействовать коллекции, применяющие алгоритм хэширования.

java.util.HashMap – этот класс расширяет AbstractMap и весьма похож на класс Hashtable. HashMap предназначен для хранения пар объектов ключ/значение. Как для ключей, так и для элементов допускаются значения типа null. Порядок хранения элементов в этой коллекции не совпадает с порядком их добавления. Порядок элементов в коллекции также может меняться во времени. HashMap обеспечивает постоянное время доступа для операций get и put.

Итерация по всем элементам коллекции пропорциональна ее емкости. Поэтому имеет смысл не делать размер коллекций чрезмерно большим, если достаточно часто придется осуществлять итерацию по элементам.

Методы HashMap не являются синхронизированными. Для того, чтобы обеспечить нормальную работу в многопоточном варианте, следует использовать либо внешнюю синхронизацию потоков, либо синхронизированный вариант коллекции.

public class Test { private class TestObject{ String text = ""; public TestObject(String text){ this.text = text; }; public String getText(){ return this.text; } public void setText(String text){ this.text = text; } } public Test() { } public static void main(String[] args) { Test t = new Test(); TestObject to = null; HashMap hm = new HashMap(); hm.put("Key1",t.new TestObject("Value 1")); hm.put("Key2",t.new TestObject("Value 2")); hm.put("Key3",t.new TestObject("Value 3")); to = (TestObject)hm.get("Key1"); System.out.println("Object value for Key1 = " + to.getText() + "\n"); System.out.println("Iteration over entrySet"); Map.Entry entry = null; Iterator it = hm.entrySet().iterator(); // Итератор для перебора всех точек входа в Map while(it.hasNext()){ entry = (Map.Entry)it.next(); System.out.println("For key = " + entry.getKey() + " value = " + ((TestObject)entry.getValue()).getText()); } System.out.println(); System.out.println("Iteration over keySet"); String key = ""; // Итератор для перебора всех ключей в Map it = hm.keySet().iterator(); while(it.hasNext()){ key = (String)it.next(); System.out.println( "For key = " + key + " value = " + ((TestObject)hm.get(key)).getText()); } } }




Содержание  Назад  Вперед