`

java需要关注的知识点---Hashtable

阅读更多
在concurrentHashMap出来之前,hashtable一直是作为线程安全的map使用。
hashtable默认的初始大小是:11.
1.Hashtable中的put方法。
  public synchronized V put(K key, V value) {
	// Make sure the value is not null
	if (value == null) {
	    throw new NullPointerException();
	}

	// Makes sure the key is not already in the hashtable.
	Entry tab[] = table;
	int hash = key.hashCode();
	int index = (hash & 0x7FFFFFFF) % tab.length;
	for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
	    if ((e.hash == hash) && e.key.equals(key)) {
		V old = e.value;
		e.value = value;
		return old;
	    }
	}

	modCount++;
	if (count >= threshold) {
	    // Rehash the table if the threshold is exceeded
	    rehash();

            tab = table;
            index = (hash & 0x7FFFFFFF) % tab.length;
	}

	// Creates the new entry.
	Entry<K,V> e = tab[index];
	tab[index] = new Entry<K,V>(hash, key, value, e);
	count++;
	return null;
    }

    1.1 不同于HashMap,Hashtable不允许出现空的key.
    1.2 不同于HashMap,下标计算方式
           HashMap : h & (length-1)
           Hashtable: (hash & 0x7FFFFFFF) % tab.length
2 Hashtable中的rehash方法:
   protected void rehash() {
	int oldCapacity = table.length;
	Entry[] oldMap = table;

	int newCapacity = oldCapacity * 2 + 1;
	Entry[] newMap = new Entry[newCapacity];

	modCount++;
	threshold = (int)(newCapacity * loadFactor);
	table = newMap;

	for (int i = oldCapacity ; i-- > 0 ;) {
	    for (Entry<K,V> old = oldMap[i] ; old != null ; ) {
		Entry<K,V> e = old;
		old = old.next;

		int index = (e.hash & 0x7FFFFFFF) % newCapacity;
		e.next = newMap[index];
		newMap[index] = e;
	    }
	}
    }

      Hashtable的增长方式是按照原有长度的2倍再加上1的方式进行增长的,不同于hashMap,hashMap是按照原有长度的2倍。
分享到:
评论

相关推荐

    尚硅谷-深入java8的集合5:Hashtable的实现原理.pdf

    ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千...

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集: JAVA核心知识点整理-282页 Java与哈希算法.docx Java中Lambda表达式的使用.docx JAVA多线程之线程间的通信方式.docx Java注解详解.docx ...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题20.jsp和Servlet的相同点和不同点 Java面试题21.内置对象和四大作用域和页面传值 Java面试题22.Session和Cookie的区别和使用场景 Java面试题23.mvc模式和mvc各部分的实现 Java面试题24.数据库分类和常用...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    01java基础-集合知识点详解.xlsx

    就是一些通用java集合知识点整理,ArrayList LinkedList,HashMap,HashTable ,ConcurrentHashMap,HashSet,LinkedHashSet类通过线程安全否: 底层: 初始值: 扩容 : 区别(对比优势) 图解

    动力节点_Java基础视频教程139_HashTable与HashMap的异同点

    动力节点的Java课程适合绝对零基础的观看,...每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn

    Java后端面试问题整理.docx

    Java后端面试知识点总结,涉及JVM • 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、...

    JAVA程序员笔试面试题汇总及答案.pdf,这是一份不错的文件

    "Java程序员笔试面试题汇总及答案.pdf知识点总结" 以下是从给定的文件中生成的相关知识点: 一、访问控制符的作用域与区别 * private 成员:缺省的成员,只能在同一类中访问 * protected 成员:可以在同一类中和...

    Java中的小知识 —- Map集合

    3. Key和value都是存储Java对象的内存地址 4.所有Map集合的key特点:无序不可重复。Map集合中的key和set集合存储元素特点相同。 Map接口的实现类: HashMap:线程不安全,底层是哈希表数据结构 Hashtable(用的很...

    HashTable、HashSet和Dictionary的区别点总结

    今天又去面试了,结果依然很悲催,平时太过于关注表面上的东西,有些实质却不太清楚,遇到HashTable和Dictionary相关的知识,记录下来,希望对后来人有所帮助,以及对自己以后复习可以参考。 1.HashTable 哈希表...

    javalruleetcode-algorithm-java:leetcode刷题

    知识点大纲 Data Structure Array Stack/Queue PriorityQueue(heap) LinkedList(single/double) Tree/BinaryTree BST HashTable Disjoint Set Trie BloomFilter LRU Cache Algorithm General Coding InOrder/...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    Java并发编程相关源码集 包括多任务线程,线程池等.rar

    Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等示例,列出一些源码包中包括的内容:  volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    数据类型自动提升(注意以下讨论的是二元操作符) 16 【基础】switch支持的类型 17 【基础】当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是...

    张孝祥Java就业培训教程.pdf

    在第二章中,全面地讲解Java的基本语法知识,对基本语法的讲解也不是泛泛而谈,而是在其中贯穿各种实际应用中的巧妙用法和注意事项。在第三章和第四章中,透彻系统地讲解了面向对象的思想和应用。在以后的章节中,用...

    疯狂JAVA讲义

    5.8.1 使用继承的注意点 155 5.8.2 利用组合实现复用 156 学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 ...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    史上最全的Java面试题集锦.pdf

    java知识点 Hashmap 源码级掌握,扩容,红⿊树,最⼩树化容量,hash冲突解决,有些⾯试官会提出发⾃灵魂的审问,⽐如为什么是红⿊树, 别的树不可以吗;为什么8的时候树化,4不可以吗,等等 concureentHashMap,段锁...

Global site tag (gtag.js) - Google Analytics