初识java集合——散列表(HashTable)

【散列表】为每个对象计算一个整数,称为散列码(是由对象的实例域产生的一个整数)更确切的说
* 不同实例域的对象产生不同的散列码
*
* 如果自定义类,就要负责实现这个类的hashcode,注意:自己实现的hashcode方法应该与equals方法兼容
* 即如果a.equals(b) 为true a和b必须具有相同的散列码
*
* 在java中,【散列表】用链表数组实现。每个列表被称为桶。想要查找表中对象,先计算散列码,然后与桶的总数取余
* 所的余数就是桶的索引。当桶中没有其他元素时,很幸运可以放入,而桶里面如果已经满了,先将新对象与桶内进行比较
* 查看是否存在。
*
* 标准类库中的桶数是2的幂次,默认为16;如果散列表太满就需要再散列(rehashed)会创建出一个桶数更多的表,并将所有元素
* 插入到这个新表中,然后丢弃原来的表。
* 装填因子就是决定了何时对散列表进行再散列。一般默认0.75
*
*
* 散列表可以实现几个重要的数据结构,其最简单的就是【Set】
*
* set的add会现在集中查找要添加的对象,如果不存在,就将对象添加进去
*

时间: 2024-11-03 21:32:39

初识java集合——散列表(HashTable)的相关文章

Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

java集合类散列表

哈希表      是种数据结构,它可以提供快速的插入操作和查找操作.第一次接触哈希表时,它的优点多得让人难以置信.不论哈希表中有多少数据, 插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级.实际上,这只需要几条机器指令. 对哈希表的使用者一一人来说,这是一瞬间的事.哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常 使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要O(N)的时间级.哈希表不仅速度快,编程实现也相对容易. 哈希表也有一些缺点

初识java集合——树集

*TreeSet与HashSet相比,树集是有序集合,对树集遍历,每个值将自动按照排序顺序呈现. * TreeSet当前使用的是红黑树,每次将一个元素添加到树中时,都将被放置正确的位置之中 * * 在TreeSet中添加元素的速度要快于数组和链表,但慢于散列表(HashSet) * * TreeSet在默认情况下,假定插入的元素实现了Comparable接口,该接口值返回负数,表明a位于b之前 * * public interface Comparable<T> * { * int compa

初识Java集合框架(Iterator、Collection、Map)

1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List和Set是Collection的子接口,ArrayList和LinkedList是List的两个实现类,HashSet和TreeSet是Set的两个实现类 重点:ArrayList.LinkedList和HashSet Map接口对应的集合是以K-V键值对的方式存储数据的,不同于Collection

初识java集合——其他集合

* 弱散列映射表(WeakHashMap) * 如果有一个值,对应的键已经不再使用了,将会出现什么情况呢 * 假定对某个键的而最后一次引用已经消亡,不再有任何途径引用这个值对象了,但是由于程序中任何 * 部分没有再引用这个键,所以这个键/值无法从Map中删除. * 遗憾的是,垃圾回收器跟踪活动的对象,只要Map对象时活动的,其中的所有桶也都是活动的,它们不能被回收. * 当对键的唯一引用来自散列表条目时,这一数据结构将于垃圾回收器协同工作一起删除键/值对 * * 下面是对于[弱散列映射表]的机制

初识java集合——映射表(Map)

*映射表 * java类库为映射表提供了两个通用的实现 HashMap和TreeMap * HashMap对键进行散列,TreeMap用键的整体顺序对元素进行排序,构建成搜索树 * * 与Set相似,HashMap的速度要比TreeMap要快一点,同时不需要按照排列访问,也应该选择HashMap * 注意,键的值必须是唯一的,如果第二次put了一个同样的键值进去,第二次的值会取代第一次的值,put会 * 返回用这个键参数存储的上一个值 * * 我们可以获取Map的视图,这是一组实现了Collec

java集合框架09——HashTable和源码分析

上一章我们学习了HashMap的源码,这一节我们来讨论一下HashTable,HashTable和HashMap在某种程度上是类似的.我们依然遵循以下步骤:先对HashTable有个整体的认识,然后学习它的源码,深入剖析HashTable. 1.HashTable简介 首先看一下HashTable的继承关系 java.lang.Object ? java.util.Dictionary<K, V> ? java.util.Hashtable<K, V> public class H

java集合HashMap、HashTable、HashSet详解

一.Set和Map关系 Set代表集合元素无序,集合元素不可重复的集合,Map代表一种由多个key-value组成的集合,map集合是set集合的扩展只是名称不同,对应如下 二.HashMap的工作原理 HashMap基于hashing原理,通过put()和get()方法储存和获取对象. put()方法: 它调用键对象的hashCode()方法来计算hashcode值,系统根据hashcode值决定该元素在bucket位置.如果两个对象key的hashcode返回值相同,那他们的存储位置相同,如

Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较

0. 前言 HashMap和HashTable的区别一种比较简单的回答是: (1)HashMap是非线程安全的,HashTable是线程安全的. (2)HashMap的键和值都允许有null存在,而HashTable则都不行. (3)因为线程安全.哈希效率的问题,HashMap效率比HashTable的要高. 但是如果继续追问:Java中的另一个线程安全的与HashMap功能极其类似的类是什么? 同样是线程安全,它与HashTable在线程同步上有什么不同?带着这些问题,开始今天的文章. 本文为