HashMap в Java

В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса Map. Java предоставляет две структуры данных для хэш-таблиц: одна - Hashtable, а следующая - HashMap. HashMap похож на Hashtable с двумя исключениями: методы HashMap несинхронизированы и позволяют вводить нулевые и нулевые значения в отличие от Hashtable. Hashtable синхронизируется и работает плохо в однопоточной среде. Из-за этого HashMap обычно предпочтительнее, если только вам не нужно заниматься потоками и синхронизацией. HashMap не является надежной коллекцией потоков и требует правильной обработки синхронизации.

В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса Map. Java предоставляет две структуры данных для хэш-таблиц: одна - Hashtable, а следующая - HashMap. HashMap похож на Hashtable с двумя исключениями: методы HashMap несинхронизированы и позволяют вводить нулевые и нулевые значения в отличие от Hashtable. Hashtable синхронизируется и работает плохо в однопоточной среде. Из-за этого HashMap обычно предпочтительнее, если только вам не нужно заниматься потоками и синхронизацией. HashMap не является надежной коллекцией потоков и требует правильной обработки синхронизации....

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

 
HashMap

Объекты хранятся путем вызова метода put (ключ, значение) HashMap и извлекаются вызовом метода get (key).

Как работает hashmap Java?

HashMap работает по принципу Hashing. В простом случае хеширование - это способ присвоения уникального кода для любой переменной / объекта после применения любой формулы / алгоритма по его свойствам. Функция хэша должна возвращать один и тот же хэш-код каждый раз, когда функция применяется на одинаковых или равных объектах.

Как работает hashmap Java

В HashMap имеется ряд «ведер», которые он использует для хранения пар ключ-значение. Ведро используется для хранения нескольких пар значений ключа. В хэш-карте ведро использует простой связанный список для хранения объектов. Каждое ведро имеет уникальный номер, это то, что идентифицирует ведро. Когда вы кладете (ключ, значение) в карту, хэш-файл будет смотреть на хэш-код ключа и хранить пару в ведре, идентификатором которого является хэш-код ключа. Например, хеш-код ключа равен 512, эта пара хранится в байтовом числе 512. Если есть какое-либо столкновение, HashMap использует LinkedList для хранения объекта. Важно отметить, что в одном ковше может храниться более одной пары ключ-значение.

Когда вы просматриваете значение в хэшмапе, давая ему ключ (get (ключ)), хэш-код определяет, какое ведро для хэш-карты нужно проверить. Сначала будет рассмотрен хэш-код ключа, который вы дали. Затем хешмап заглянет в соответствующее ведро, а затем сравним ключ, который вы дали с ключами всех пар в ковше, сравнивая их с equals(). Если в ковше имеется более одного объекта, то выполняется линейный поиск, чтобы найти, какой элемент в ковше равен требуемому элементу, используя метод equals().

Как добавить элементы в Hashmap?

 
import Java.util.*;
class TestClass
{
  public static void main (String[] args) throws Java.lang.Exception
  {
    // Создание HashMap
    HashMap days = new HashMap();
    // Добавление пар ключ / значение
    days.put(1,"Sunday");
    days.put(2,"Monday");
    days.put(3,"Tuesday");
    days.put(4,"Wednesday");
  }
}

Как получить размер Java HashMap?

Метод size() используется для возврата числа сопоставлений значений ключа на этой карте.

 
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
  System.out.println("Size of HashMap: "+ days.size());

Вывод:

 
Size of HashMap: 4

Как перебирать элементы в Hashmap?

Существует несколько способов просмотра элементов в Hashmap.

Используйте функцию entrySet() для итерации по карте и нужно получить доступ к значению и ключу:

 
HashMap days = new HashMap();
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
Set> set = days.entrySet();
for (Map.Entry 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

Использование для цикла:

 
// Итерация по HashMap
for(Integer key: days.keySet()){
  System.out.println(key  +" :: "+ days.get(key));
}

Вывод:

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

Использование итератора и Map.Entry:

 
Iterator> it = days.entrySet().iterator();
while (it.hasNext()) {
  Map.Entry pair = it.next();
  System.out.println( pair.getKey() + "   "  + pair.getValue());
}

Вывод:

 
1   Sunday
2   Monday
3   Tuesday
4   Wednesday

Использование foreach и Map.Entry:

 
for (Map.Entry pair : days.entrySet()) {
  System.out.println( pair.getKey() + "   "  + pair.getValue());
}

Вывод:

 
1   Sunday
2   Monday
3   Tuesday
4   Wednesday

Использование цикла while:

 
Set set = days.entrySet();
Iterator i = set.iterator();
while(i.hasNext()) {
   Map.Entry me = (Map.Entry)i.next();
   System.out.print(me.getKey() + ": ");
   System.out.println(me.getValue());
}

Удаление записей из HashMap

Метод remove() используется для удаления сопоставления для указанного ключа с этой карты, если он присутствует.

 
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
// удалить значение для ключа 3
days.remove(3);
System.out.println("Values after remove: "+ days);

Вывод:

 
Values after remove: {1=Sunday, 2=Monday, 4=Wednesday}

Удалить все значения из Java HashMap

 
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
System.out.println("Brefor remove: "+ days.size());
// удалить весь элемент из hashmap
days.clear();
System.out.println("After remove: "+ days.size());

Вывод:

 
Brefor remove: 4
After remove: 0

Как выполнить поиск ключа в HashMap?

Используя метод containsKey(), вы можете узнать о существовании ключа.

 
// Создание HashMap
HashMap days = new HashMap();
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
Integer key=4;
if(days.containsKey(key)){
  System.out.println("Key " + key + " found");
}else{
  System.out.println("Key " + key+ " does not exist");
}

Вывод:

 
Key 4 found

Как получить ключ от значения в HashMap?

 
// Создание HashMap
HashMap days = new HashMap();
// Добавление пар ключ / значение
days.put(1,"Sunday");
days.put(2,"Monday");
days.put(3,"Tuesday");
days.put(4,"Wednesday");
Integer key= null;
String value="Tuesday";
for(Map.Entry entry: days.entrySet()){
	if(value.equals(entry.getValue())){
		key = (Integer)entry.getKey();
		break; // нарушение, потому что его одна к одной карте
	}
}
System.out.println("Found Key : "+ key +" value: " + value);

Вывод:

 
Found Key :  3 value: Tuesday

Следующая Java-программа иллюстрирует весь вышеупомянутый метод в одной программе

 
import Java.util.*;
class TestClass
{
  public static void main (String[] args) throws Java.lang.Exception
  {
    // Как создать HashMap?
    HashMap  days = new HashMap ();
    // Как добавить пары ключ / значение в HashMap?
    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");
    // Как проходить через HashMap?
    for(Map.Entry m:days.entrySet()){
        System.out.println(m.getKey()+" "+m.getValue());
    }
    // Как удалить определенный элемент из HashMap
    days.remove(3);
  Set> set = days.entrySet();
  for (Map.Entry sg : set) {
    System.out.println("Key :"+sg.getKey() + "   Value :"+days.get(sg.getKey()));
  }
  // Как найти ключ в HashMap?
  Integer key=4;
  if(days.containsKey(key)){
    System.out.println("Key " + key + " found");
  }else{
    System.out.println("Key " + key+ " does not exist");
  }
  // Как получить ключ от его значения в HashMap
    Integer iKey= null;
    String value="Monday";
    for(Map.Entry entry: days.entrySet()){
      if(value.equals(entry.getValue())){
        iKey = (Integer)entry.getKey();
        break; // нарушение, потому что его одна к одной карте
      }
    }
    System.out.println("Found Key : "+ iKey +" value: " + value);
    // Как удалить весь элемент из HashMap?
    days.clear();
    // Как найти размер HashMap
    System.out.println("After remove: "+ days.size());
  }
}

Различия между HashMap и Hashtable

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

    Различия между HashMap и Hashtable

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

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

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