本帖最后由 苏联兵 于 2013-9-1 00:32 编辑
我来试试看看能不能解决你的问题,回答的不好还请批评,首先Map没有继承Collection接口,它提供Key到Value的映射,Map接口提供三种集合的视图,Map的内容可以被当作一组Key集合,一组Value集合,或一组Key-Value映射。
Hashtable继承Map接口,实现一个Key-Value映射的哈希表,任何非空(non-null)的对象都可以作为Key或Value,添加数据使用put(Key,Value)方法,取出数据使用get(Key)方法,这两个基本操作的时间开销为常数。
Hashtable通过initial capacity 和 load factor两个参数调整性能,通常默认的load factor 0.75较好的实现了时间和空间的均衡,增大load factor 可以节省空间,但相应的查找时间将增大,这会影响想get 和 put这样的操作。Hashtable 是同步,它可以存储重载由Object 定义的hashCode()和equals() 方法和对象。Hashtable 的构造方法如下:
Hashtable() //默认构造方法
Hashtable(int size) //创建一个散列表,该散列表具有由size指定的原始大小。
Hashtable(int size, float fillRatio) / /该散列表具有由size指定的原始大小和有fillRatio指定的填充比必须介于0.0和0.1之间。
Hashtable(Map m) //创建一个散列表,该散列表用m中的元素初始化。- 下面是一个Hashtable的实例:
- import java.util.*;
- 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.hashMoreElement(){
- //判断此枚举是否包含更多元素
- Object o = er.nextElement();
- //返回此枚举的下一个元素,也就是key值
- Object v = hh.get(o);
- //根据key将Value取出
- System.out.println(o+"="+v);
- 输出
- }
- }
- }
复制代码 由于Hashtable属于散列表,所以并没有按顺序存储。
HashMap
HashMap将“关键字/值”对存储到散列表中,所以HashMap中用于散列和查找的只能是主关键字,其他关键字不能用于散列或查找。HashMap和Hashtable相似,不同之处在于HashMap是非同步的,并且允许null,即null value 和null key。HashMap仍然使用哈希函数来计算关键字的哈希码,并非存储在对应位置上,所以记录之间是无序的,但它的存储和查找都很快,远远超过其他类型的集合,HashMap中的方法很多,这里就不举例了,HashMap和的使用方式基本相同,两者最大的不同是,Hashtable的方法是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须提供外同步。Hashtable和HashMap采用的算法集合都一样,所以性能不会有很大的差异。它们都完成了Map接口。说的有点多希望能帮到你。 |