Java类集框架之Map映射接口

在计算机科学中,最重要的两门就是数据结构于算法,但是对于刚开始学习的时候想要理解是很苦难的,所以Java提供了类集框架来帮助我们实现大量的现成的方法。

今天先来介绍一下Map映射接口,Map没有继承Collection接口,它提供了key到value的映射,Map中不能包含想通的key,每个key都只能映射一个value。Map接口提供了三种集合的视图,Map的内容可以被当做一组key的集合、一组value集合或一组key-value映射。

1、Hashtable哈希表类:

Hashtable继承了Map接口,实现了一个key-value映射的哈希表,任何非空的对象都可以作为key或value。添加数据使用put(key,value)方法,取出数据使用get(key)方法,这两个就基本操作的时间开销为常数。
Hashtable是同步的。它可以存储重载有object定义的hashCode()和equals()方法的对象。hashCode()方法计算和返回对象的散列码。当然equals()方法比较两个对象。
Hashtable的构造如下:
Hashtable()     //默认的构造方法
Hashtable(int size)    //创建一个散列表,该散列表具有size指定的原始大小
Hashtable(int size,float fillRatio)    //该散列表具有由size指定的原始大小和由fillRatio指定的填充比必须介于0.0和1.0之间
Hashtable(Map m)    //创建一个散列表,该散列表用m中的元素初始化
【代码剖析】
import java.util.*;
public class HashTableTest_1 {
	public static void main(String args[]){
		Hashtable hh=new Hashtable();
		hh.put("a", "name");
		hh.put("b", "age");
		hh.put("c", "address");
		hh.put("d", "wage");
		Enumeration er=hh.keys(); //返回此哈希表中的键的枚举
		while(er.hasMoreElements()){ //判断此枚举是否包含更多的元素
			Object o=er.nextElement();//返回此枚举的下一个元素,也就是key值
			Object v=hh.get(o); //根据key将value取出
			System.out.println(o+"="+v);
		}
		
	}
}
程序的运行结果如下:
b=age
a=name
d=wage
c=address
【解释说明】
由于Hashtable属于散列表,所以没有按顺序存储

2、HashMap哈希映射表

HashMap将“关键字/值”对存储到散列表中。所有HashMap中用于散列和查找的只能是主关键字,其他的次关键字不能不能用于散列或查找。HashMap和Hashtable是相似的,但不同之处在于HashMap是非同步的,并且允许Null,即null和null key。HashMap仍然使用哈希函数来计算关键字的哈希码,并存储在对应的位置上,所以记录之间是无序的,但它的存储和查找都很快,远远超过其他类型的集合。

3、HashMap和Hashtable的区别

HashMap是Hashtable的轻量级实现(非线程安全的实现),它们都完成了Map接口,主要区别在于HashMap允许空键值(null key)。由于线程非安全,效率上可能高于Hashtable.HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法允许容易让人引起误解。Hashtable继承自Dictionary类。
两者最大的不同是,Hashtable的方法是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法基本一样,所以性能不能差很多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值