Java中的HashMap与WeakHashMap

Java中的HashMap与WeakHashMap

HashMap

Java.util.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();
         
        //线程休眠4s
        Thread.sleep(4000);
         
        System.out.println(m);
    }
}
    class Demo
    {
        public String toString()
        {
            return "demo";
        }

        // finalize方法
        public void finalize()
        {
            System.out.println("finalize 方法被调用");
        }   
}

输出结果:

{demo=Hi}
{demo=Hi}

WeakHashMap

WeakHashMap同样是Map接口的一种实现。与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();
         
        // 线程休眠4s
        Thread.sleep(4000); .
         
        System.out.println(m);
    }
}
 
class Demo
{
    public String toString()
    {
        return "demo";
    }
     
    // finalize方法
    public void finalize()
    {
        System.out.println("finalize 方法被调用");
    }
}

输出结果:

{demo = Hi}
finalize 方法被调用
{ }

Hashmap与Weakhashmap的一些重要区别:

  1. 强引用 strong reference vs 弱引用 Weak References : 弱引用对象不是引用对象的默认类型/类,而是在使用时应明确指定。在WeakHashMap中,使用弱引用类型引用条目对象。
    强引用: 是引用对象的默认类型/类。任何具有活动强引用的对象都不会进行垃圾收集。在HashMap中,键对象具有强引用。
  2. 垃圾回收机制 Garbage Collector: 在HashMap中,条目对象(条目对象存储键值对)不符合垃圾回收机制的条件,即HashMap优先于垃圾回收机制。
    在WeakHashmap中,当某个键被丢弃时,与该键相关联的条目将自动从映射中删除,换言之,进行垃圾回收。
  3. 克隆方法 Clone method 的实现 Implementation: HashMap实现了Cloneable接口。
    WeakHashMap没有实现Cloneable接口,它只实现了Map接口。因此,WeakHashMap类中没有clone()方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程