深入探究J2ME Hashtable实现原理(1)(2)
内部类 Hashtable有2个内部类 HashtableEntry--用于存放key-value,nextElement的类。 classHashtableEntry{ inthash; Objectkey; Objectvalue; HashtableEntrynext; } HashtableEnumerator遍历的枚
内部类
Hashtable有2个内部类
HashtableEntry--用于存放key-value,nextElement的类。
- classHashtableEntry{
- inthash;
- Objectkey;
- Objectvalue;
- HashtableEntrynext;
- }
HashtableEnumerator遍历的枚举类。
- classHashtableEnumeratorimplementsEnumeration{
- booleankeys;
- intindex;
- HashtableEntrytable[];
- HashtableEntryentry;
- HashtableEnumerator(HashtableEntrytable[],booleankeys){
- this.table=table;
- this.keys=keys;
- this.index=table.length;
- }
- publicbooleanhasMoreElements(){
- if(entry!=null){
- returntrue;
- }
- while(index-->0){
- if((entry=table[index])!=null){
- returntrue;
- }
- }
- returnfalse;
- }
- publicObjectnextElement(){
- if(entry==null){
- while((index-->0)&&((entry=table[index])==null));
- }
- if(entry!=null){
- HashtableEntrye=entry;
- eentry=e.next;
- returnkeys?e.key:e.value;
- }
- thrownewNoSuchElementException(
- /*#ifdefVERBOSE_EXCEPTIONS*/
- ///skipped"HashtableEnumerator"
- /*#endif*/
- );
- }
- }
代码写的是相当的简介。有一些比较技巧性的用法也是相当的不错,比如:
- if(entry==null){
- while((index-->0)&&((entry=table[index])==null));
- }这段写的是相当的好,可见作者的功力,循环变量table
- while(index-->0)
- //循环变量,查看是否有下一个元素,
- if((entry=table[index])!=null){
- returntrue;
- }
- }
了解了Hashtable的数据存放格式,我们看看存放的关键逻辑在put,remove,get方法中存在。
- intindex=(hash&0x7FFFFFFF)%tab.length;
这样的函数,这个函数的意义上,根据散列值来获取对象的存储位置。
精彩图集
精彩文章