`

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倍。
分享到:
评论

相关推荐

    于笑扬java综合知识点总结-必背.pdf

    于笑扬java综合知识点总结-必背 目录篇: JDK 常用的包 Java 中的 JDK(Java Development Kit)提供了许多有用的包,开发者可以根据需要选择合适的包来实现不同的功能。常用的包包括java.lang、java.util、java....

    java综合知识点总结-必背1

    【Java综合知识点总结】 在Java编程中,掌握各种核心概念是至关重要的。以下是一些关键知识点的详细解释: 1. **JDK常用的包**:Java Development Kit (JDK) 包含了许多核心库,如`java.lang`,它是所有Java程序的...

    于笑扬java综合知识点总结-必背.doc

    ### 于笑扬Java综合知识点总结 #### 一、JDK常用的包 1. **java.lang**:包含运行Java程序所需的基本类,如`String`、`Math`等。 2. **java.util**:提供了集合框架(如`List`、`Map`)、日期和时间操作工具等。 3...

    java综合知识点总结-必背.doc

    在Java的学习过程中,掌握以下知识点至关重要,尤其对于Java编程人员来说,这些都是必备的基础知识。 一、JDK常用的包 Java Development Kit (JDK) 包含了Java运行环境、开发工具和Java类库。常用包包括`java.lang`...

    于笑扬java综合知识点总结-必背(吐血推荐).doc

    于笑扬Java综合知识点总结 一、JDK常用的包 JDK(Java Development Kit)是Java开发包,提供了Java开发所需的各种工具和类库。JDK中的常用包包括: * java.lang:提供了基本的编程工具类,如String、Integer、...

    Java知识总结--CoreJava.doc

    Java是世界上最流行的编程语言之一,尤其在...这些只是Java Core的一些基础知识点,实际编程中还会涉及更多高级特性和设计模式,如多线程同步机制、I/O流、反射、设计模式等。不断学习和实践是提升Java编程技能的关键。

    java基础知识点

    ### Java基础知识点详解 #### 一、Java集合类框架 Java集合类框架是Java编程语言中用于处理数据的重要工具之一,主要包括以下基本接口: 1. **`Collection`**:这是集合类框架的基础接口,它代表了一个对象的集合...

    JAVA笔试题----------大唐软件

    在这份笔试题中,我们可以看到涵盖了Java基础知识、Java集合框架、多线程、异常机制、Java ClassLoader、MVC模式、JSP、Struts、EJB、设计模式、XML解析和Open Source项目等多个方面的知识点。 1. JAVA基础知识: ...

    java面试笔试题---基础

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出多个与Java相关的知识点,以下是对这些知识点的详细解析: ### Java基础知识 #### 1. 基本数据类型与包装类 Java提供了多种基本数据类型,包括`byte`,...

    JAVA基础-----面试宝典

    根据给定文件的信息,我们可以提炼出一系列与Java基础及面试相关的知识点,并进行详细的解析: ### 1. Spring、Hibernate、Struts的关系 Spring、Hibernate 和 Struts 是三个非常流行的 Java 框架,它们在 J2EE ...

    java综合知识点总结

    这些只是Java知识体系的一小部分,深入学习Java需要涵盖类与对象,继承,接口,异常处理,多线程,网络编程,I/O流,设计模式等多个方面。对于每个知识点,都值得深入理解和实践,以提升编程技能。

    java知识点复习

    ### Java知识点复习:深入解析 #### 重要概念:原始类型与引用类型 在Java中,数据类型分为两大类:原始类型和引用类型。原始类型直接存放数据,如`int`、`char`、`float`等,它们在内存中占用固定的字节数,不...

    java-se-summary-JavaSE相关的总结文章

    这个总结文章将深入探讨Java SE的主要知识点,帮助开发者全面理解并掌握这一强大的编程工具。 1. **基础语法**:Java是一种强类型、面向对象的语言,其基础语法包括变量声明、数据类型(如整型、浮点型、字符型、...

    JAVA DEVELOPMENT KIT-118-doc

    在JDK 1.1.8中,包含了许多关键性的知识点: 1. **Java基础**:JDK 1.1.8包含了Java的基础类库,如`java.lang`、`java.io`、`java.util`等,这些类库为编写Java程序提供了基础支持,包括字符串处理、输入/输出操作...

    java面试,常考知识点汇总

    ### Java面试常考知识点汇总 #### 一、抽象类与接口的区别 1. **定义**: - **抽象类**:使用`abstract`关键字定义的类。此类不能被实例化,通常用来作为其他类的基础模板,其中可以包含抽象方法和其他非抽象的...

    JAVA面试-知识点汇总.pdf

    在Java编程语言中,面试时常会涉及到多个核心概念和技术,以下是对这些知识点的详细解析: 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,它关注对象的关键特性和行为,忽略不重要的细节。...

    (超赞)JAVA精华之--深入JAVA API

    ### 深入Java API #### 一、Java SE **1.1 深入 Java API** **1.1.1 Lang包** - **String类与 StringBuffer类...这些知识点不仅对于初学者非常重要,对于想要进一步提升技能的开发者来说也是非常有价值的参考资料。

Global site tag (gtag.js) - Google Analytics