IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> HashMap的数据结构 -> 正文阅读

[数据结构与算法]HashMap的数据结构

添加数据原理

  1. HashMap底层是(数组+链表+红黑树)
  2. 添加一个元素时,先得到hash值,然后把它转成索引值
  3. 然后找到存储数据表table,看这个索引位置是否已经存放元素
  4. 如果没有,直接加入
  5. 如果有,调用equals方法对准备加入元素和已有元素进行比较,如果相同,则放弃添加,如果不相同,则添加至最后
  6. 在Java8中,如果一条链表的元素个数达到TREEIFY_THRESHOLD(默认为8),并且table的大小>=MIN_TREEIFY_CAPACITY(默认64),就会进行树化

数据结构

  1. table:存放数据类型为Node<hash,key,value,next>,存放基本数据
  2. entrySet:存放数据类型为Entry<key,value>,存放了数据的引用
  3. 同理,keySet和values也一样
  4. keySet:可以单独存放了Node节点中key值的引用
  5. values:可以单独存放Node节点中value值的引用
package aggregate.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapSource_ {
    public static void main(String[] args) {
        Map map = new HashMap();

        map.put("1","tom");
        map.put("2","jack");

        //1.k-v 最后是存放在HashMap$Node类型的Node节点中
        //2.为了方便遍历,还会创建EntrySet集合,该集合存放的数据类型为Entry,而Entry中又包含了k-v
        //  EntrySet<Entry<k-v>>
        //3.EntrySet中,定义的类型是Map.Entry,但是实际上存放的还是HashMap$Node
        //  这是因为HashMap$Node implements Map.Entry
        //4.当把HashMap$Node对象存放到EntrySet中,就方便了我们遍历
        //5.简而言之,EntrySet中存放的只是Node中数据的引用

        Set set = map.entrySet();
        System.out.println(set.getClass());
        for (Object obj : set) {
            //System.out.println(obj.getClass());
            //为了从HashMap$Node 取出k-v
            //1.先做一个向下转型
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "-" + entry.getValue());
        }

        //同理,keySet和values也一样
        //keySet可以单独存放了Node节点中key值的引用
        //values可以单独存放Node节点中value值的引用
        Set key = map.keySet();
        Collection value = map.values();
        System.out.println(key.getClass() + "\n" + value.getClass());
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:24:22  更:2021-09-12 13:26:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 11:12:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码