基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。

  HashMap 的实例有两个参数影响其性能:初始容量 和加载因子,JUCE的HashMap初始容量为101,加载因子是当值的数量大于键值的3/2时重新加载。JUCE中的HashMap是线程安全的,可以在多线程中使用。JUCE的HashMap实现要点和通用的实现方式相同,简单的自己画了个内存结构图。

HashEntry

 class HashEntry{public:HashEntry (KeyTypeParameter k, ValueTypeParameter val, HashEntry* const next): key (k), value (val), nextEntry (next){}const KeyType key;ValueType value;HashEntry* nextEntry;JUCE_DECLARE_NON_COPYABLE (HashEntry)};

迭代器

 class Iterator{public://==============================================================================Iterator (const HashMap& hashMapToIterate): hashMap (hashMapToIterate), entry (nullptr), index (0){}/** Moves to the next item, if one is available.When this returns true, you can get the item's key and value using getKey() andgetValue(). If it returns false, the iteration has finished and you should stop.*/bool next(){if (entry != nullptr)entry = entry->nextEntry;while (entry == nullptr){if (index >= hashMap.getNumSlots())return false;entry = hashMap.hashSlots.getUnchecked (index++);}return true;}/** Returns the current item's key.This should only be called when a call to next() has just returned true.*/KeyType getKey() const{return entry != nullptr ? entry->key : KeyType();}/** Returns the current item's value.This should only be called when a call to next() has just returned true.*/ValueType getValue() const{return entry != nullptr ? entry->value : ValueType();}private://==============================================================================const HashMap& hashMap;HashEntry* entry;int index;JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Iterator)};

转载于:https://www.cnblogs.com/davygeek/p/4278930.html

一起学JUCE之HashMap相关推荐

  1. HashMap遍历的方法——总结

    之前在统计最大组的数目的时候学到了HashMap的遍历方法,现在来总结一下吧. 第一种--map.entrySet() 需要Map.Entry<K,V>,可以获得key和value. // ...

  2. Redis初学:1(NoSQL的简介和Redis的安装)

    什么是NoSQL NoSQL数据库意即:Not Only SQL 不仅仅是SQL,它区别于传统的关系型数据库,储存方式按照的是key-value的形式存储数据,这个我们可以联想到我们以前学过的Hash ...

  3. SpringBoot学习笔记(六)——Redis数据库

    Redis数据库 灵魂拷问: 不是学了MySQL吗,存数据也能存了啊,又学一个数据库干嘛? 在前面我们学习了MySQL数据库,它是一种传统的关系型数据库,我们可以使用MySQL来更好地管理和组织我们的 ...

  4. SpringBoot笔记(三)Redis

    在前面我们学习了MySQL数据库,它是一种传统的关系型数据库,我们可以使用MySQL来更好地管理和组织我们的数据,虽然在小型Web应用下,只需要一个MySQL+Mybatis自带的缓存系统就可以胜任大 ...

  5. JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  6. 干货!JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  7. 【学亮IT手记】HashMap集合精讲

    Map接口概述 Map接口和Collection接口下的集合,存储数据的形式是不同的. A:Collection中的集合,元素是孤立存在的,理解为单身.向集合中存储元素采用一个个元素的方式存储. B: ...

  8. 第三次学JAVA再学不好就吃翔(part94)--HashMap嵌套HashMap

    学习笔记,仅供参考,有错必纠 HashMap嵌套HashMap 没啥好说的,直接看代码. 输入: package com.guiyang.bean;import java.util.HashMap;p ...

  9. 零基础学Java_Map接口、HashMap 类、HashTable 类、TreeMap 类(整理总结)

    文章目录 一.集合的框架体系 1. 常用集合接口概述 2. 常用 Collection 集合的实现子类 3. 常用的 Map 图的实现子类 二.Map 接口 1. Map 接口的特点 2. Map 图 ...

最新文章

  1. linux下后台执行shell脚本
  2. oracle12 java_java – 无法使用12c jar创建Eclipse数据源到Oracle 12c.不过11g的作品
  3. 转发和重定向的区别?
  4. matlab 基于Topsis的熵权法2
  5. 【dmp文件还原到oralce数据库】
  6. ⑧javaWeb之在例子中学习(过滤器Filter)
  7. 【EasyUI】DataGrid实现表格的筛选过滤、排序
  8. 动态代理proxy与CGLib的区别
  9. C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)
  10. 闪光灯slave是什么意思_闪光灯实战讲解 | 室内光线+闪光灯使用配合=完美光效...
  11. MFC单选按钮的使用
  12. firefox下光标处插入文本
  13. js 打印出来的节点多了m_前端实用技术分享—用Vue实现打印指定区域
  14. CISCO ACL配置(目前)
  15. matlab编程弹簧,弹簧设计计算程序分享
  16. “你打算怎么构建云安全资源池”
  17. 0基础学习音视频路线,以及重磅音视频资料下载
  18. IV WOE 评分卡 分箱
  19. canvas绘图详解-06-绘制一个五角星-常用绘图原理
  20. Hexo+next主题配置踩的坑

热门文章

  1. Redhat enterprise linux下安装rlwrap工具
  2. Flutter延时任务、Flutter通过Future与Timer实现延时任务
  3. Java中对数组的排序方法总汇分析
  4. Android中DisplayMetrics 获取手机屏幕分辨率
  5. 设计模式07----代理模式
  6. 格式化字符串,不足补零
  7. iOS - AutoLayout
  8. 100万并发连接服务器笔记之Erlang完成1M并发连接目标
  9. gdb 打印vector 等stl数据
  10. 深入ASP.NET MVC之七:ActionResult的执行(View的加载和渲染)