java -- HashTable
特点
- HashTable 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashTable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
- HashTable 的实现同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,HashTable中的映射不是有序的。
跟HashMap的区别
- HashTable是线程安全,HashMap不是
- HashTable不允许key和value为null,HashMap允许
扩容
- 初始容量:哈希表在创建时的容量,默认是16
- 加载因子:哈希表在其容量自动增加之前可以达到多满的一种尺,默认是0.75
当哈希表的容量超过 初始容量 * 加载因子,就会触发扩容,扩容后的哈希表大概是原来的两倍。
如何选择初始容量和加载因子
通常,默认加载因子是 0.75, 这是在时间和空间成本上寻求一种折中。加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 get 和 put 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生 rehash 操作。
HashTable的构造函数
// 默认构造函数。 public Hashtable() // 指定“容量大小”的构造函数 public Hashtable(int initialCapacity) // 指定“容量大小”和“加载因子”的构造函数 public Hashtable(int initialCapacity, float loadFactor) // 包含“子Map”的构造函数 public Hashtable(Map<? extends K, ? extends V> t)
HashTable的API
synchronized void clear() synchronized Object clone() boolean contains(Object value) synchronized boolean containsKey(Object key) synchronized boolean containsValue(Object value) synchronized Enumeration<V> elements() synchronized Set<Entry<K, V>> entrySet() synchronized boolean equals(Object object) synchronized V get(Object key) synchronized int hashCode() synchronized boolean isEmpty() synchronized Set<K> keySet() synchronized Enumeration<K> keys() synchronized V put(K key, V value) synchronized void putAll(Map<? extends K, ? extends V> map) synchronized V remove(Object key) synchronized int size() synchronized String toString() synchronized Collection<V> values()
数据结构
跟前面的HashMap类似,可以参考前面HashMap。同样也存在类似的Hash冲突和性能问题。
性能问题
性能上的原理跟HashMap类似,另外是线程安全的,所以要比HashMap更慢一些。
HashTable遍历方法
方法一
// 假设table是Hashtable对象 // table中的key是String类型,value是Integer类型 Integer integ = null; Iterator iter = table.entrySet().iterator(); while(iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); // 获取key key = (String)entry.getKey(); // 获取value integ = (Integer)entry.getValue(); }
方法二
// 假设table是Hashtable对象 // table中的key是String类型,value是Integer类型 String key = null; Integer integ = null; Iterator iter = table.keySet().iterator(); while (iter.hasNext()) { // 获取key key = (String)iter.next(); // 根据key,获取value integ = (Integer)table.get(key); }
方法三
// 假设table是Hashtable对象 // table中的key是String类型,value是Integer类型 Integer value = null; Collection c = table.values(); Iterator iter= c.iterator(); while (iter.hasNext()) { value = (Integer)iter.next(); }
方法四
- 根据keys()获取Hashtable的集合。
- 通过Enumeration遍历“第一步”得到的集合。
Enumeration enu = table.keys(); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); }
方法五
- 根据elements()获取Hashtable的集合。
- 通过Enumeration遍历“第一步”得到的集合。
Enumeration enu = table.elements(); while(enu.hasMoreElements()) { System.out.println(enu.nextElement()); }
相关推荐
Hashtable是Java中的一种散列表实现,它可以存储键值对,并根据键的哈希值来快速查找和访问值。
在Java编程语言中,哈希表(HashTable)是一种常见的数据结构,它提供了高效的数据存储和检索功能。哈希表基于哈希函数将键(Key)映射到数组的索引位置,通过键值对(Key-Value Pair)来存储数据。这种数据结构允许...
- `java.util.Hashtable`:存储键值对的数据结构。 2. **ChatArea类定义**: - 继承自`Panel`,实现了`ActionListener`和`Runnable`接口。`Panel`是GUI中的一个组件容器,`ActionListener`用于监听按钮等组件的...
在Java编程语言中,`Hashtable`是`Collections`框架的一部分,它是一个同步的键值对存储容器。在早期的Java版本中,`Hashtable`并没有直接支持泛型,这意味着你可以在其中存储任何类型的键(`Object`)和值(`Object...
- **HashMap, HashTable**: 键值对存储,快速查找。 - **Set, TreeSet, HashSet**: 不允许重复元素的集合。 - **Queue, PriorityQueue**: 队列数据结构,先进先出(FIFO)。 6. **多线程(Multithreading)** -...
在Java中,`HashTable`是早期版本(Java 1.0)提供的一种线程安全的哈希表实现。尽管现在已经被`HashMap`所替代,但理解`HashTable`的工作原理和特性仍然对深入理解Java集合框架以及数据结构有重要意义。 哈希表的...
Hashtable的用法---马克-to-win Java视频哈希表的详细介绍
在Java编程语言中,`HashTable`是一个非常重要的数据结构,它提供了一种存储键值对的方式,其中每个键都是唯一的。这个压缩包“Java 实例 - 遍历 HashTable 的键值源代码+详细教程.zip”包含了关于如何遍历`...
【Java 面试知识点详解】 在Java编程中,了解并掌握一些核心概念和技术是非常重要的,特别是对于面试来说。以下是一些关键知识点的详细解析: 1. **final、finally、finalize的区别** - `final`:这是一个修饰符...
### 应聘Java--笔试常出现的问题 #### 集合框架 集合框架在Java中是一个重要的组成部分,它提供了一套强大的工具集用于管理和操作对象集合。集合框架的设计旨在简化对象存储、检索和操纵的过程,并提供了多种不同...
6. **集合与泛型**:推荐使用`List`而非`Vector`,使用`Map`而非`Hashtable`。使用泛型来提高类型安全性,避免强制类型转换。 7. **并发编程**:遵循Java并发库的最佳实践,如使用`ExecutorService`管理线程池,...
4. **集合框架**:Java集合框架是存储和管理对象的工具,包括List(ArrayList、LinkedList)、Set(HashSet、LinkedHashSet、TreeSet)和Map(HashMap、TreeMap、Hashtable)。泛型的引入增强了类型安全,避免了强制...
1. 分别使用Vector、Hashtable、Stack,ArrayList、LinkedList和HashSet作为容器类,实现以下要求: (1) 向容器中添加1,000,000个随机整数。 (2) 遍历容器中的所有元素。 (3) 随机产生100,000个整数,在容器中查找...
Java Util包,全称为`java.util`,是Java标准库中的核心包之一,包含了大量用于通用编程任务的类和接口。这个包自Java 1.0版本以来就存在,随着时间的发展,不断添加了新的功能和类,使得Java程序员在处理各种常见...
- **Hashtable**:线程安全的映射。 - **IdentityHashMap**:基于对象身份而非哈希码的映射。 - **WeakHashMap**:允许键被垃圾回收的映射。 - **Collections**:提供了许多静态方法来操作集合。 #### 五、输入/...
而Hashtable是继承自Dictionary类,它也是线程安全的。TreeMap则是基于红黑树的,可以实现元素的排序。 对于集合框架的线程安全问题,文档中提到,可以保证线程安全的方式是使用同步代码块或同步方法,或者在JDK1.5...
- **ConcurrentHashMap**:分析其线程安全的实现机制,对比`Hashtable`和`synchronized Map`。 - **BlockingQueue**:学习`ArrayBlockingQueue`、`LinkedBlockingQueue`等队列的用法,理解生产者-消费者模式。 3....
2. HashMap与Hashtable:详解这两种映射结构,包括它们的工作原理和使用注意事项。 3. Map接口:理解键值对的概念,熟悉put、get、remove等操作。 4. 集合遍历:掌握迭代器和增强for循环的遍历方式。 五、多线程 1....
9. **Hashtable与HashMap**:Hashtable是古老的键值存储,不支持null键值,方法是同步的;HashMap是现代的Map实现,允许null键值,方法非同步,更高效,提供了containsValue和containsKey方法。 10. **Overload与...
Properties类在Java中用于处理配置文件,它继承自Hashtable。Properties类主要用于存储和加载键值对,常用于程序的配置信息。它可以读取.properties格式的文件,进行国际化处理。通过`load()`方法加载文件,`...