当前位置:   article > 正文

Java中的Map集合、散列表、红黑树介绍_散列表和红黑树

散列表和红黑树

​前言

本文源码采用jdk1.8

上面两篇介绍了Collection下的list,不接着介绍Collection下的set,因为Set集合实际上就是HashMap来构建的!前面讲解了:

Java集合是Java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*,Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。

原本我是打算先写Collection下的Set集合的,结果看了源码发现:Set集合实际上底层就是HashMap来构建的

所以,就先介绍Map集合和红黑树吧

一、Map简介

前面我们学习的Collection叫做集合,它可以快速查找现有的元素。

Map 是一组成对的“键值对”对象,允许使用键 (key) 来查找值 (value)。它提供了一个映射表,可以通过某个对象来查找另一个对象。它也被称作关联数组,因为它将某些对象与另外一些对象关联在一起

Map基本特性

  • 以 key-value 键值对的形式存储数据,可通过 key 来查找 value

  • 键唯一,值不唯一。即一个键只能映射一个值,一个值可以对应多个键\

  • 无法保证元素的存入顺序

映射的模型图是这样的:

那为什么我们需要这种数据存储结构呢?举个例子

生活中,一个身份证号证明一个人的身份,一一对应


下面用红色框框圈住的就是Map值得关注的子类:

****这只是集合包下的,是线程不安全的,在并发包下还有线程安全的ConcurrentHashMap,下面我会介绍的~

二、散列表介绍

散列表是一种不在意元素的顺序,能够快速的查找元素的数据结构

散列表为每个对象通过哈希函数计算出一个整数,称为散列码。根据这些计算出来的整数(散列码)保存在对应的位置上!

在Java中,散列表用的是链表数组实现的,每个列表称之为桶。每个桶都可能会出现被别的元素占用的情况,即此时hashCode散列码相同,会存储在同一个位置,这个现象叫散列冲突

  • 开放寻址:核心思想是如果出现了散列冲突,我们就重新探测一个空闲的位置,开放寻址法解决方案有线性探测法、二次探测、双重散列等方案。
  • 链表法:散列表中,每个“桶(bucket)”都会对应一个条链表,在查找时先听过hash(key)找到位置,然后遍历链表找到对应元素

三、HashMap介绍

Hashmap定义:

public class HashMap<K,V> extends AbstractMap<K,V>  
  implements Map<K,V>, Cloneable
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/214745
推荐阅读
相关标签
  

闽ICP备14008679号