HashMap和HashTable区别

                                                                                                    HashMap和HashTable区别

1.    HashMap:

         HashMap实现了的是Map接口,非线性安全,效率相对高,是将键映射到值的对象,其中键和值都是对象,键是不能重复的,当然重复也不会编译运行错误,但是出现重复键时,后一个键的值会把前一个的键的值给覆盖,HashMap是允许出现null键和值的,但是多个null键会视为Key相同,对应的值也理所当然地被覆盖,HashMap提供了containskey和containsvalue方法查询键和值是否存在。


2.   HashTable:

        HashTable的父类是dictionary,线性安全,效率相对低,同样他也不允许键重复,相同会覆盖值,注意的是,HashTable是不允许键值对为null的,当然编译不会报错,但运行会报空指针异常,同样的HashTable也提供了containskey和containsvalue方法查询键和值是否存在,HashTable也提供了一个contains方法查询值是否存在(不懂它与containsValue的区别)。


小提示:

     如果在多线程中访问HashTable时,是不需要为他实现同步方法的,而HashMap则要为它额外的实现synchronize方法。


代码块:

import java.util.HashMap;
import java.util.Hashtable;

public class Demo {
	public static void main(String[] args) {

		HashMap<Object, Object> hashmap = new HashMap<>();
		hashmap.put("1", "1");
		hashmap.put("1", "11");// 覆盖前一个的值
		hashmap.put("2", null);// 编译、运行通过
		hashmap.put(null, "11");// 同上
		hashmap.put(null, "66");// 覆盖前一个的值

		Hashtable<String, String> hashtable = new Hashtable<>();
		hashtable.put("1", "10");
		hashtable.put("1", "1111");// 覆盖前一个的值
		hashtable.put("2", "33");
		hashtable.put("3", "33");
		// hashtable.put("4", null); //编译通过,运行报java.lang.NullPointerException
		// hashtable.put(null, null); //同上
		System.out.println("hashmap的size:" + hashmap.size());
		System.out.println("hashtable的size:" + hashtable.size());
		System.out.println("hashmap中键为null的值为:" + hashmap.get(null));

		System.out.println(hashtable.get("1"));// 获取hashtable键为1的值,看是否覆盖

		// 区别何在?
		System.out.println(hashtable.contains("33"));
		System.out.println(hashtable.containsValue("33"));

	}
}



运行结果:

          hashmap的size:3
          hashtable的size:3
          hashmap中键为null的值为:66
          1111
          true
          true


                                                                                           虚心向学,有错恳请指教!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值