Разница между HashMap и Hashtable в Java?

Оба HashTable и HashMap реализуют интерфейс карты, но между ними существуют некоторые различия. Они есть:

  1. Безопасность потоков (синхронизировано)
  2. Нулевые ключи
  3. Наследование
  4. Производительность
  5. Траверс
  6. Сбой
  7. Сложность по времени
  8. Наследие

Безопасность потоков (синхронизировано)

Первым и самым значительным различием между Hashtable и HashMap является то, что HashMap не является потокобезопасным (несинхронизированным), тогда как Hashtable представляет собой потокобезопасную (синхронизированную) коллекцию. Это делает HashMap лучше для не-потоковых приложений, поскольку несинхронизированные объекты обычно работают лучше, чем синхронизированные.

Первым и самым значительным различием между Hashtable и HashMap является то, что HashMap не является потокобезопасным (несинхронизированным), тогда как Hashtable представляет собой потокобезопасную (синхронизированную) коллекцию. Это делает HashMap лучше для не-потоковых приложений, поскольку несинхронизированные объекты обычно работают лучше, чем синхронизированные....

Вы можете сделать HashMap потокобезопасным (синхронизированным), вызвав этот код

 
Map mp = Collections.synchronizedMap(hashMap);

Null Keys

 

HashTable может содержать только ненулевой объект в качестве ключа или в качестве значения. Чтобы хранить и извлекать объекты из хеш-таблицы, объекты, используемые в качестве ключей, должны реализовывать метод hashCode и метод equals. Поскольку «null» не является объектом, вы не можете вызывать на нем .equals() или .hashCode(), поэтому Hashtable не может вычислить хэш, чтобы использовать его в качестве ключа.

Наследование

Хотя оба интерфейса HashMap и HashTable реализуют интерфейс Map, но они расширяют два разных класса. HashMap расширяет класс AbstractMap, где, поскольку HashTable расширяет класс Dictionary, который является унаследованным классом в JDK.

Производительность

HashMap не синхронизирован, поэтому он работает быстро. HashTable внутренне синхронизирован, что делает HashTable немного медленнее, чем HashMap. Несинхронизированные объекты часто намного лучше в производительности по сравнению с синхронизированным объектом, например Hashtable, в однопоточной среде.

Traverse

HashMap проходит через Iterator, а Hashtable проходит через Enumerator и Iterator.

Безотказная

Итератор в HashMap является отказоустойчивым, а перечислитель для Hashtable - нет. Отказоустойчивость относится к контексту итераторов. Если итератор был создан в объекте коллекции, а какой-либо другой поток пытается изменить объект коллекции «структурно», будет выбрано исключение параллельной модификации.

Сложность времени

Hashtable использует целую цепочку (со связанными списками) в качестве стратегии обработки столкновений, ограничивающей время поиска O (n). Начиная с JAVA 8 HashMap использует Balanced Tree в качестве стратегии разрешения конфликтов, которая имеет ограниченное временное время O (log n).

Наследство

HashMap является членом Java Collection Framework с самого начала его внедрения в JDK 1.2. Но HashTable был там до JDK 1.2, и он расширяет класс Dictionary, который является унаследованным классом в JDK. Из JDK 1.2 было сделано для реализации интерфейса Map, что делает его членом коллекции.

Внедрение HashMap

 
import Java.util.*;
class TestClass {
  public static void main (String[] args) {
    // Создание HashMap
    HashMap < Integer,String >  days = new HashMap < Integer,String >();
    // Добавление пар ключ / значение
    days.put(1,"Sunday");
    days.put(2,"Monday");
    days.put(3,"Tuesday");
    days.put(4,"Wednesday");
    Set <  Map.Entry < Integer,String > > set = days.entrySet();
    for (Map.Entry < Integer,String > sg : set) {
      System.out.println("Key :"+sg.getKey() + "   Value :"+days.get(sg.getKey()));
    }
  }
}

Выход

 
Key :1   Value :Sunday
Key :2   Value :Monday
Key :3   Value :Tuesday
Key :4   Value :Wednesday

Как создать документ Excel программно

Реализация Hashtable

 
import Java.util.*;
class TestClass {
  public static void main (String[] args) {
    // Как создать Hashtable?
    Hashtable < Integer,String > days = new Hashtable < Integer,String >();
    // Как добавить пары «ключ / значение» в Hashtable?
    days.put(1,"Sunday");
    days.put(2,"Monday");
    days.put(3,"Tuesday");
    days.put(4,"Wednesday");
    days.put(5,"Thursday");
    days.put(6,"Friday");
    days.put(7,"Saturday");
    // Как проходить через Hashtable?
    for(Map.Entry m:days.entrySet()){
        System.out.println(m.getKey()+" "+m.getValue());
    }
  }
}

Выход

 
7 Saturday
6 Friday
5 Thursday
4 Wednesday
3 Tuesday
2 Monday
1 Sunday

Источник: http://net-informations.com/Java/cJava/hashmap.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector