龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

深入探究J2ME Hashtable实现原理(1)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
Hashtable实例有两个参数影响其效率:容量和装载因子。装载因子在CLDC实现中始终是75%(而在其它版本中这个值是可以指定的)。当Hashtable中包含的实体数超过装载因子和当前容量的一个

Hashtable实例有两个参数影响其效率:容量和装载因子。装载因子在CLDC实现中始终是75%(而在其它版本中这个值是可以指定的)。当Hashtable中包含的实体数超过装载因子和当前容量的一个结合值(这可能通过相应的算法得出)时,就通过调用rehash方法来增加容量。

J2ME Hashtable的实现原理

首先看一下Hashtable的用法。

Hashtable有2个构造函数

  1. publicHashtable(intinitialCapacity);//指定容量大小  
  2. publicHashtable(){  
  3. this(11);//默认的容量是11,为什么是11,而不是10呢?  

Demo1

  1. HashtablesTable=newHashtable();  
  2. sTable.put("wuhua","wuhua");  
  3. sTable.remove("wuhua");  
  4. sTable.clear(); 

上面是简单的用法。

Hashtable源代码解读

在了解源代码之前,我们先来了解下一些java不常用的关键字。

transient

当串行化某个对象时,如果该对象的某个变量是transient,那么这个变量不会被串行化进去。也就是说,假设某个类的成员变量是transient,那么当通过ObjectOutputStream把这个类的某个实例保存到磁盘上时,实际上transient变量的值是不会保存的。因为当从磁盘中读出这个对象的时候,对象的该变量会没有被赋值。另外这篇文章还提到,当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是读取这个类的实例的状态,并且把这个状态付给这个类的对象。

Transient这个关键字很重要,来看下源代码里面有几处是用到这个关键字的。

  1. privatetransientHashtableEntrytable[];  
  2. privatetransientintcount; 

源代码中只有上面两个字段的定义是用到的,但是这两个字段是用于存储style="COLOR:#000000"href="http://storage.it168.com/"target=_blank>存储Hashtable的容器字段,因此可以说Hashtable是不允许序列化的。

精彩图集

赞助商链接