Рубрики

Hashmap против WeakHashMap в Java

HashMap

Класс Java.util.HashMap является реализацией на основе хеширования. В HashMap у нас есть пара ключ-значение.
Несмотря на то, что объект указан как ключ в hashmap, он не имеет никакой ссылки, и он не подходит для сборки мусора, если он связан с HashMap, т.е. HashMap доминирует над сборщиком мусора.

// Java-программа для иллюстрации
// Hashmap

import java.util.*;

class HashMapDemo

{

    public static void main(String args[])throws Exception

    {

        HashMap m = new HashMap();

        Demo d = new Demo();

          

        // помещает запись в HashMap

        m.put(d," Hi "); 

          

        System.out.println(m); 

        d = null;

          

        // сборщик мусора называется

        System.gc();

          

        // нить спит 4 секунды

        Thread.sleep(4000); 

          

        System.out.println(m);

        }

    }

    class Demo

    {

        public String toString()

        {

            return "demo";

        }

          

        // завершаем метод

        public void finalize()

        {

            System.out.println("Finalize method is called");

        }

}

Выход:

{demo=Hi}
{demo=Hi}

WeakHashMap

WeakHashMap — это реализация интерфейса Map. WeakHashMap почти такой же, как HashMap, за исключением случая WeakHashMap, если объект, указанный в качестве ключа, не содержит ссылок — он подходит для сборки мусора, даже если он связан с WeakHashMap. то есть сборщик мусора доминирует над WeakHashMap.

// Java-программа для иллюстрации
// WeakHashmap

import java.util.*;

class WeakHashMapDemo

{

    public static void main(String args[])throws Exception

    {

        WeakHashMap m = new WeakHashMap();

        Demo d = new Demo();

          

        // помещает запись в WeakHashMap

        m.put(d," Hi "); 

        System.out.println(m);

          

        d = null;

          

        // сборщик мусора называется

        System.gc(); 

          

        // нить спит 4 секунды

        Thread.sleep(4000); .

          

        System.out.println(m);

    }

}

  

class Demo

{

    public String toString()

    {

        return "demo";

    }

      

    // завершаем метод

    public void finalize()

    {

        System.out.println("finalize method is called");

    }

}

Выход:

{demo = Hi}
finalize method is called
{ }

Некоторые более важные различия между Hashmap и WeakHashmap:

  1. Сильные и слабые ссылки : Слабые ссылочные объекты не являются типом / классом ссылочных объектов по умолчанию, и их следует явно указывать при их использовании. Этот тип ссылки используется в WeakHashMap для ссылки на объекты ввода.
    Сильные ссылки: Это тип / класс ссылочного объекта по умолчанию. Любой объект, имеющий активную сильную ссылку, не подходит для сборки мусора. В HashMap ключевые объекты имеют сильную ссылку.
  2. Роль сборщика мусора: сборщик мусора: в HashMap объект ввода (объект ввода хранит пары ключ-значение) не подходит для сборки мусора, т. Е. Hashmap доминирует над сборщиком мусора.
    В WeakHashmap, когда ключ отбрасывается, его запись автоматически удаляется с карты, другими словами, сборщик мусора.
  3. Реализация метода клонирования : HashMap реализует интерфейс Cloneable.
    WeakHashMap не реализует интерфейс Cloneable, он только реализует интерфейс Map. Следовательно, в классе WeakHashMap нет метода clone ().

Эта статья предоставлена Ришабх Патель . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Hashmap против WeakHashMap в Java

0.00 (0%) 0 votes