首页 > 编程语言 > 详细

java.util.HashTable (JDK1.8)

时间:2019-03-15 14:58:10      阅读:296      评论:0      收藏:0      [点我收藏+]

1.Hashtable 特性(先总结下面会详细讲的):

1.Hashtable 存储的内容是键值对(key-value)映射,其底层实现是一个Entry数组+链表

2.Hashtable是线程安全(他的put和get 方法都被synchronized 修饰)的它的key、value都不可以为null。

3.Hashtable中的映射不是有序的。

4.Hashtable属性如下,跟HashMap一样,也是一个数组,初始容量是11,负载英子是0.75。

5.目前hashtable仍然只使用了链表去解决hash碰撞问题,因此,如果tab[index]没找到,则遍历链表继续查找即可,算法复杂读O(n)。

 

2. java.util.Hashtable继承关系

技术分享图片

 

 

2.1 Java.util.Hashtable属性

  

private transient Entry<?,?>[] table; //数组+链表实现
private transient int count; //Entry的总数
private int threshold; //count>=此值时,扩容rehash
private float loadFactor; //负载因子
private transient int modCount = 0; //用来帮助实现fail-fast机制


加载因子loadFactor是Hashtable扩容前可以达到多满的一个尺度。这个参数是可以设置的,默认是0.75。加载因子过高虽然减少了空间开销,但同时也增加了查找某个条目的时间(在大多数 Hashtable 操作中,包括 get 和 put 操作,都反映了这一点)。

Hashtable的四个构造函数

  技术分享图片

 

 技术分享图片

技术分享图片

技术分享图片

 

其实上面的前三个构造方法,最终都调用了第四个构造方法。如果在初始化Hashtable时,不指定加载因子loadFactor,那么加载因子会被设置为0.75f。

Hashtable的contains方法

技术分享图片

这里使用的是很简单的两层for循环,外层是在table上,内层是在链表上检索,通过equals方法来比对。

Hashtable的get方法

技术分享图片

Hashtable的put方法

技术分享图片

 Hashtable的addEntry方法

 技术分享图片

这个方法需要注意链接新节点的时候,新的结点是链表表头。

技术分享图片

hashtable 的5中遍历方式(本地试了下 第4中最快就是枚举遍历)。

//第一种hashtable遍历方式
System.out.println("第一种遍历方式");
for(Iterator<String> iterator=hashtable.keySet().iterator();iterator.hasNext();){
String key=iterator.next();
System.out.println("key-----"+key);
System.out.println("value--------"+hashtable.get(key));
}

//第二种hashtable遍历方式
System.out.println("第二种遍历方式");
for(Iterator<Entry<String, String>> iterator=hashtable.entrySet().iterator();iterator.hasNext();){
Entry<String,String> entry=iterator.next();
System.out.println("key---------"+entry.getKey());
System.out.println("value------------"+entry.getValue());
}

//第三种hashtable遍历方式
System.out.println("第三种遍历方式");
for(Map.Entry<String, String> entry: hashtable.entrySet()){
System.out.println("key---------"+entry.getKey());
System.out.println("value--------"+entry.getValue());
}

//第四种遍历方式
System.out.println("第四种遍历方式");
Enumeration<String> e=hashtable.keys();
while(e.hasMoreElements()){
String key=e.nextElement();
System.out.println("key-----"+key);
System.out.println("value-------"+hashtable.get(key));
}

//第五中遍历方式(获取所有的值)
System.out.println("第五种遍历方式");
Enumeration<String> e2=hashtable.elements();
while (e2.hasMoreElements()) {
String string = (String) e2.nextElement();
System.out.println(string);
}
}

java.util.HashTable (JDK1.8)

原文:https://www.cnblogs.com/xiaowangbangzhu/p/10537050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!