J2ME中的Hashtable和Vector
2010年08月18日 16:38
J2ME中的数据结构大多都用轻量级的Hashtable和Vector. 

1.Hashtable 

ME版本的Hashtable和SE版本的最大的区别是泛型的支持,前者本身不支持泛型。但是也有些细微的差别。 

Hashtable(以下都是指ME版本的Hashtable)将键(key)映射到值(value)上。任何非空(non-null)的对象都可以被用作一个key或者作为一个值。 

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

当需要往Hashtable中装入很多实体时,创建一个合适大容量的Hashtable实例比让实例去自动增加来容量来适应要在性能上高的多。 

2.Vector 

Vector类实现了一个可增的对象数组。像数组一样,它包含的组件可以用整数索引(下表)来访问。因此,当Vector创建之后,一个Vector的大小可以随着增加或者移除元素操作而增大或者减小。 

每个Vector试着通过维持一个容量(capacity)和一个容量增量(capacityIncrement)来优化存储管理。容量总是至少跟Vector的大小(size)一样大;它通常都会大一些,因为组件会被加进到Vector中,Vector的存储大小会以capacityIncrement块大小来增加。应用程序可以在插入大量组件之前对Vector容量进行增加;这样做可以降低增加性重新分配的数量。 

数据结构中我们学习过链表、数组、树等诸多数据结构。Hashtable就是一种底层由链表实现的数据结构,所以它拥有链表数据结构的优缺点。而Vector由数据结构比较特殊的数组来实现,同样拥有了数组的优缺点,不同的时,由于在数组基础之上增加的可变的操作,这样一定程度上降低了它的效率。不过Vector的效率据说还是相当高的。