首页 > 其他分享 >iOS:字典存储数据的原理

iOS:字典存储数据的原理

时间:2023-04-21 13:44:31浏览次数:26  
标签:存储 hash key iOS 数组 数据 字典

注:适用于Java 等其他语言的技术原理

存储的逻辑

1. 字典底层有一个数组,靠数组来存储数据;
2. 将 key 进行 hash 算法。得到 `hash值`;
3. 将 `hash值` 与 `数组的长度` 进行`位与运算`, 得到的结果为数据应该存储的位置;
4. 找到数组对应的位置,然后设置对应的数据(此处使用链表①进行数据存储)。

取出的逻辑

1. 将 key 进行 hash 算法。得到 `hash值`;
2. 将 `hash值` 与 `数组的长度` 进行`位与运算`, 得到的结果为数据应该存储的位置;
3. 然后找到对应位置的数据。如果不是则判断其 Next。

总结:
其实字典,就是使用 key 得到应该存储的位置。
然后进行添加数据和取出数据

字典和数组的执行效率
 数组:一个一个的遍历。
 字典:根据 key 直接知道对应的索引值
    
 总结:
 因为不知道要查询的数据的索引,所以字典的查询速度更快,执行效率更高。
 在查询大量数据的时候,尽量使用字典。

解释:
①链表:自己去查查

标签:存储,hash,key,iOS,数组,数据,字典
From: https://www.cnblogs.com/dulinshun/p/ios-zi-dian-cun-chu-shu-ju-de-yuan-li.html

相关文章

  • iOS:AutoReleasePool
    具体参考文章AutoRelease是依靠AutoreleasePoolPage来进行push和pop进行工作的AutoreleasePoolPage为双向链表,parent字段指向上一层,child指向下一层每个AutoreleasePoolPage的大小为4096字节每个AutoreleasePoolPage最多可以存放505个对象。首个page可以......
  • iOS:runloop 相关
    一个Runloop包含了多个mode一个mode包含了若干个source0/source1/time/observerRunloop启动时只能选择其中一个model作为当前modelRunloop常用的Model1.UIInitializationRunLoopMode:首次启动时执行的mode,启动后不再使用2.kRunloopDefaultMode:默认mode,一般主......
  • BIOS
    配置开发环境,写一个helloworld驱动程序编写基本的驱动程序代码结构,导出为自定义项目模板,方便以后使用模板创建项目,少写一些样板代码;同时了解了wdk的ntifs头文件和预处理指令#pragmaonce  vscode联机搜索文档 开发三件套: 调试器WinDbg(X64)+虚拟机VirtualBox+编译器VSc......
  • iOS:Cocoapods 常用命令
    命令描述安装与卸载sudogeminstallcocoapods安装cocoapodssudogeminstallcocoapods-v1.10.0安装cocoapods1.10.0版本sudogemuninstallcocoapods卸载cocoapodssudogemuninstallcocoapods-v1.10.0卸载版本1.10.0---安装在个......
  • Trie字典树(例题详解+模板cpp)
    字典树(Trie树)一:概念字典树是一种树形结构,用于存储一组字符串,支持快速的字符串查找和前缀匹配。字典树的本质是利用字符串之间的公共前缀,将具有相同前缀的字符串合并在一起,从而实现高效的字符串操作。数据结构字典树是一棵多叉树,每个节点包含若干个指向子节点的指针,每个节点代表一......
  • mybatis 调用 oracle 带包存储过程(有out参数)
    https://blog.csdn.net/u010925982/article/details/102958001  1.先写xml映射文件<selectid="call"parameterType="java.util.HashMap"statementType="CALLABLE"resultType="java.util.HashMap"><!--call包名.方法名(参数)-......
  • WPF 给类库设置设计时使用的资源字典
    在开发多语言版本时,我将界面显示的文本保存在语言资源zh.xaml和en.xaml中,但程序启动,加载语言资源时是外部的配置文件决定的,因此语言资源我无法添加在App.xaml文件中,而开发单个XAML界面时,设计器将会因为找不到资源文件的存在,而拿不到资源,每次遇到语言相关的资源键值,都需要手动去......
  • 读取txt文件内容两两结合,存储为dat文件
    下面是一个简单的示例程序,演示如何读取一个txt文件的内容,将每两行结合成一行,并将结果写入一个dat文件中:pythonCopycodewithopen('input.txt','r')asinput_file:withopen('output.dat','w')asoutput_file:#逐行读取输入文件内容forline_number,lineinenumerate......
  • vue全家桶进阶之路47:Vue3 Axios拦截器封装成request文件
    可以将Axios拦截器封装成一个单独的request文件,以便在整个应用程序中重复使用。以下是一个示例,展示如何将Axios拦截器封装成一个request文件:1、创建一个名为request.js的新文件,并导入Axios:importaxiosfrom'axios';2、创建一个名为request的函数,并将其导出:这将创建一个名......
  • UVA Immediate Decodability(简单字典树)
    ImmediateDecodabilityTimeLimit:3000MS     MemoryLimit:0KB     64bitIOFormat:%lld&%lluSubmit StatusDescription  ImmediateDecodability Anencodingofasetofsymbolsissaidtobe immediately decodableifnocode......