`
youyu4
  • 浏览: 440186 次
社区版块
存档分类
最新评论

java -- HashTable

 
阅读更多

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());
}

 

分享到:
评论

相关推荐

    java集合-Hashtable的使用

    Hashtable是Java中的一种散列表实现,它可以存储键值对,并根据键的哈希值来快速查找和访问值。

    HashTable的java实现

    在Java编程语言中,哈希表(HashTable)是一种常见的数据结构,它提供了高效的数据存储和检索功能。哈希表基于哈希函数将键(Key)映射到数组的索引位置,通过键值对(Key-Value Pair)来存储数据。这种数据结构允许...

    java-聊天窗口java-聊天窗口.doc

    - `java.util.Hashtable`:存储键值对的数据结构。 2. **ChatArea类定义**: - 继承自`Panel`,实现了`ActionListener`和`Runnable`接口。`Panel`是GUI中的一个组件容器,`ActionListener`用于监听按钮等组件的...

    java Hashtable的泛型化

    在Java编程语言中,`Hashtable`是`Collections`框架的一部分,它是一个同步的键值对存储容器。在早期的Java版本中,`Hashtable`并没有直接支持泛型,这意味着你可以在其中存储任何类型的键(`Object`)和值(`Object...

    java-code Java语言程序.zip

    - **HashMap, HashTable**: 键值对存储,快速查找。 - **Set, TreeSet, HashSet**: 不允许重复元素的集合。 - **Queue, PriorityQueue**: 队列数据结构,先进先出(FIFO)。 6. **多线程(Multithreading)** -...

    哈希表-使用Java开发的哈希表-HashTable.zip

    在Java中,`HashTable`是早期版本(Java 1.0)提供的一种线程安全的哈希表实现。尽管现在已经被`HashMap`所替代,但理解`HashTable`的工作原理和特性仍然对深入理解Java集合框架以及数据结构有重要意义。 哈希表的...

    Hashtable的用法---马克-to-win Java视频

    Hashtable的用法---马克-to-win Java视频哈希表的详细介绍

    Java 实例 - 遍历 HashTable 的键值源代码+详细教程.zip

    在Java编程语言中,`HashTable`是一个非常重要的数据结构,它提供了一种存储键值对的方式,其中每个键都是唯一的。这个压缩包“Java 实例 - 遍历 HashTable 的键值源代码+详细教程.zip”包含了关于如何遍历`...

    java--九阴真经

    【Java 面试知识点详解】 在Java编程中,了解并掌握一些核心概念和技术是非常重要的,特别是对于面试来说。以下是一些关键知识点的详细解析: 1. **final、finally、finalize的区别** - `final`:这是一个修饰符...

    应聘Java--笔试常出现的问题

    ### 应聘Java--笔试常出现的问题 #### 集合框架 集合框架在Java中是一个重要的组成部分,它提供了一套强大的工具集用于管理和操作对象集合。集合框架的设计旨在简化对象存储、检索和操纵的过程,并提供了多种不同...

    Google-Java-Programming-style.rar_java programming

    6. **集合与泛型**:推荐使用`List`而非`Vector`,使用`Map`而非`Hashtable`。使用泛型来提高类型安全性,避免强制类型转换。 7. **并发编程**:遵循Java并发库的最佳实践,如使用`ExecutorService`管理线程池,...

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

    4. **集合框架**:Java集合框架是存储和管理对象的工具,包括List(ArrayList、LinkedList)、Set(HashSet、LinkedHashSet、TreeSet)和Map(HashMap、TreeMap、Hashtable)。泛型的引入增强了类型安全,避免了强制...

    java-Exe5_1.rar_Exe5_3_exe5_exe5_1_exe5_2_java-Exe5_1

    1. 分别使用Vector、Hashtable、Stack,ArrayList、LinkedList和HashSet作为容器类,实现以下要求: (1) 向容器中添加1,000,000个随机整数。 (2) 遍历容器中的所有元素。 (3) 随机产生100,000个整数,在容器中查找...

    java-util包资料

    Java Util包,全称为`java.util`,是Java标准库中的核心包之一,包含了大量用于通用编程任务的类和接口。这个包自Java 1.0版本以来就存在,随着时间的发展,不断添加了新的功能和类,使得Java程序员在处理各种常见...

    java-all.pdf

    - **Hashtable**:线程安全的映射。 - **IdentityHashMap**:基于对象身份而非哈希码的映射。 - **WeakHashMap**:允许键被垃圾回收的映射。 - **Collections**:提供了许多静态方法来操作集合。 #### 五、输入/...

    整理的Java-EE面试总结.pdf

    而Hashtable是继承自Dictionary类,它也是线程安全的。TreeMap则是基于红黑树的,可以实现元素的排序。 对于集合框架的线程安全问题,文档中提到,可以保证线程安全的方式是使用同步代码块或同步方法,或者在JDK1.5...

    计算机后端-Java-Java高并发从入门到面试教程-存思路.zip

    - **ConcurrentHashMap**:分析其线程安全的实现机制,对比`Hashtable`和`synchronized Map`。 - **BlockingQueue**:学习`ArrayBlockingQueue`、`LinkedBlockingQueue`等队列的用法,理解生产者-消费者模式。 3....

    java-programming-chapter-interview.zip_java programming

    2. HashMap与Hashtable:详解这两种映射结构,包括它们的工作原理和使用注意事项。 3. Map接口:理解键值对的概念,熟悉put、get、remove等操作。 4. 集合遍历:掌握迭代器和增强for循环的遍历方式。 五、多线程 1....

    java-专业】最全-JAVA面试题

    9. **Hashtable与HashMap**:Hashtable是古老的键值存储,不支持null键值,方法是同步的;HashMap是现代的Map实现,允许null键值,方法非同步,更高效,提供了containsValue和containsKey方法。 10. **Overload与...

    Java-J2SE学习笔记

    Properties类在Java中用于处理配置文件,它继承自Hashtable。Properties类主要用于存储和加载键值对,常用于程序的配置信息。它可以读取.properties格式的文件,进行国际化处理。通过`load()`方法加载文件,`...

Global site tag (gtag.js) - Google Analytics