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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值