在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综合知识点总结-必背 目录篇: JDK 常用的包 Java 中的 JDK(Java Development Kit)提供了许多有用的包,开发者可以根据需要选择合适的包来实现不同的功能。常用的包包括java.lang、java.util、java....
【Java综合知识点总结】 在Java编程中,掌握各种核心概念是至关重要的。以下是一些关键知识点的详细解释: 1. **JDK常用的包**:Java Development Kit (JDK) 包含了许多核心库,如`java.lang`,它是所有Java程序的...
### 于笑扬Java综合知识点总结 #### 一、JDK常用的包 1. **java.lang**:包含运行Java程序所需的基本类,如`String`、`Math`等。 2. **java.util**:提供了集合框架(如`List`、`Map`)、日期和时间操作工具等。 3...
在Java的学习过程中,掌握以下知识点至关重要,尤其对于Java编程人员来说,这些都是必备的基础知识。 一、JDK常用的包 Java Development Kit (JDK) 包含了Java运行环境、开发工具和Java类库。常用包包括`java.lang`...
于笑扬Java综合知识点总结 一、JDK常用的包 JDK(Java Development Kit)是Java开发包,提供了Java开发所需的各种工具和类库。JDK中的常用包包括: * java.lang:提供了基本的编程工具类,如String、Integer、...
Java是世界上最流行的编程语言之一,尤其在...这些只是Java Core的一些基础知识点,实际编程中还会涉及更多高级特性和设计模式,如多线程同步机制、I/O流、反射、设计模式等。不断学习和实践是提升Java编程技能的关键。
### Java基础知识点详解 #### 一、Java集合类框架 Java集合类框架是Java编程语言中用于处理数据的重要工具之一,主要包括以下基本接口: 1. **`Collection`**:这是集合类框架的基础接口,它代表了一个对象的集合...
在这份笔试题中,我们可以看到涵盖了Java基础知识、Java集合框架、多线程、异常机制、Java ClassLoader、MVC模式、JSP、Struts、EJB、设计模式、XML解析和Open Source项目等多个方面的知识点。 1. JAVA基础知识: ...
从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出多个与Java相关的知识点,以下是对这些知识点的详细解析: ### Java基础知识 #### 1. 基本数据类型与包装类 Java提供了多种基本数据类型,包括`byte`,...
根据给定文件的信息,我们可以提炼出一系列与Java基础及面试相关的知识点,并进行详细的解析: ### 1. Spring、Hibernate、Struts的关系 Spring、Hibernate 和 Struts 是三个非常流行的 Java 框架,它们在 J2EE ...
这些只是Java知识体系的一小部分,深入学习Java需要涵盖类与对象,继承,接口,异常处理,多线程,网络编程,I/O流,设计模式等多个方面。对于每个知识点,都值得深入理解和实践,以提升编程技能。
### Java知识点复习:深入解析 #### 重要概念:原始类型与引用类型 在Java中,数据类型分为两大类:原始类型和引用类型。原始类型直接存放数据,如`int`、`char`、`float`等,它们在内存中占用固定的字节数,不...
这个总结文章将深入探讨Java SE的主要知识点,帮助开发者全面理解并掌握这一强大的编程工具。 1. **基础语法**:Java是一种强类型、面向对象的语言,其基础语法包括变量声明、数据类型(如整型、浮点型、字符型、...
在JDK 1.1.8中,包含了许多关键性的知识点: 1. **Java基础**:JDK 1.1.8包含了Java的基础类库,如`java.lang`、`java.io`、`java.util`等,这些类库为编写Java程序提供了基础支持,包括字符串处理、输入/输出操作...
### Java面试常考知识点汇总 #### 一、抽象类与接口的区别 1. **定义**: - **抽象类**:使用`abstract`关键字定义的类。此类不能被实例化,通常用来作为其他类的基础模板,其中可以包含抽象方法和其他非抽象的...
在Java编程语言中,面试时常会涉及到多个核心概念和技术,以下是对这些知识点的详细解析: 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,它关注对象的关键特性和行为,忽略不重要的细节。...
### 深入Java API #### 一、Java SE **1.1 深入 Java API** **1.1.1 Lang包** - **String类与 StringBuffer类...这些知识点不仅对于初学者非常重要,对于想要进一步提升技能的开发者来说也是非常有价值的参考资料。