使用符号在比较时即节省时间又节省内存,因为符号仅仅存储一次

ruby的符号是一种不可改变的字符串,同一个符号在代码中多次引用时,是指向同一个对象,拥有相同的object id

而字符串是可变的,代码中的相同的内容有时却要分别存储,拥有不同的object id

用字符串作为hash的键,ruby要计算该字符串的hash值,并将其与hash中的其他键的hash进行比较

而用符号作为hash的键,因为符号的不可改变性,ruby仅仅比较该符号的object id是否与hash中的其他键的object id是否相同

当然使用符号也有缺点,ruby会将符号存储在一个符号表中,知道进程结束才会释放,在运行过程中是不会被gc回收的。当符号躲到一定程度就会造成内存的溢出,当然这只是理论情况下,谁又会床在足够多的符号呢

在做字符串比较时,ruby只会比较符号的object id,不会去计算,这会比比较字符串快很多,因为计算时,ruby会调用hash函数计算键的hash值,然后用他与其他的进行比较

转载于:https://blog.51cto.com/7681707/1354750

为什么要使用符号作为hash的键相关推荐

  1. Redis 笔记(05)— hash 类型(设置获取单个hash值、判断hash键是否存在、设置获取多个hash值、获取所有hash的键、获取所有hash的值、删除hash指定键)

    Redis 的字典是无序字典.Redis 的字典的值只能是字符串,当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收. hash 结构也可以用来存储用户信息,不同于字符串一次性需要 ...

  2. 【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

    文章目录 一.哈希 Hash 键值对集合 二.查询操作 1.Redis 中查询 Hash 键值对数据 2.查询 Hash 键是否存在 3.查询 Hash 中所有的键 Field 4.查询 Hash 中 ...

  3. 计算机中¥符号按哪个键,人民币符号(¥)

    ¥是下列两种货币的货币符号: 人民币(CNY) 日元(JPY) 因为以上两种货币的单位都是圆(圆/元/円),日语发音为en.符号由拉丁字母"Y"和两道平行水平线组成.中国大陆早期多 ...

  4. hash存储结构【六】

    一.概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Ag ...

  5. Redis深入浅出—hash、set

    一 .Hash 1.1 介绍 Redis中的字典采用哈希表作为底层实现,一个哈希表有多个节点,每个节点保存一个键值对. 在Redis源码文件中,字典的实现代码在dict.c和dict.h文件中. Re ...

  6. python井号键怎么打_#井号键#——你怎么念?

    在facebook和微博上,人们用"@"符号来点朋友的名,用"#"符号来强调某个话题.如果你看到某个微博上面写着"#今日新词",那么你就知道 ...

  7. Redis-04Redis数据结构--哈希hash

    文章目录 哈希概述 客户端操作hash Redis hash 结构命令 Spring操作reids的hash Step1 修改defaultSerializer Step2 操作hash 注意 代码 ...

  8. Java中使用Jedis连接Redis对Hash进行操作的常用命令

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  9. python - hash类型操作

    Redis在内存中存储hash类型是以name对应一个字典形式存储的 常用操作 在name对应的hash中获取根据key获取value hget(name,key) 在name 对应的hash 中设备 ...

最新文章

  1. python 装饰器 生成器 迭代器和闭包
  2. 《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则
  3. Oracle:sqlplus查询出的中文是乱码问题的解决(转)
  4. 如何在Tomcat中设置JNDI数据库连接池-Spring教程示例
  5. 数据可视化【十一】树状图
  6. ofo已还清蚂蚁金服欠款?回应:消息不实 但没有放弃
  7. Java简易开发环境搭建
  8. Mac电脑不能识别文本和命令的解决方法
  9. java core 之 泛型
  10. 关于代理服务器与NAT
  11. linux系统下载7.0,redhat7.0_redhat enterprise linux 7.0下载 附安装教程 - 121下载站
  12. h5判断百度、高德、腾讯地图客户端是否安装及调起客户端导航
  13. 黑苹果 版本 安装 驱动 usb 显卡 声卡 网卡 8169 kext 变色龙
  14. Codeforces Gym100962J:Jimi Hendrix(树型DP)
  15. 第四章 函数式编程(Lambda表达式Stream流)
  16. 文件夹自动生成html画廊,在 Photoshop 中创建 Web 照片画廊
  17. 无法定位程序输入点_except1于动态链接库
  18. 冬季送暖!实用围巾打法!(图)
  19. ligerui 表格中设置单元格不可编辑,添加行,删除行
  20. 数学形态学之腐蚀算法

热门文章

  1. SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器
  2. texture android,Android OpenGL结合了SurfaceTexture(外部图像)和普...
  3. windows java ekho_Vekou
  4. java set 空_Java面试总结(Map和Set)
  5. python下载图片、已知url_python实现通过URL下载图片到本地服务器
  6. html中加载shp文件,运用shapefile.js解析Shp文件
  7. ​AMD放出超强新算法,旧N卡也能焕发第二春
  8. MIT机器狗再进化,碎石冰面上跑也不打滑,这次真的稳如狗了
  9. 不出声也能命令Siri!康奈尔大学华人团队开发无声语言识别项链,中文英文都行...
  10. 苹果:AMD yes!官方开售显卡模块,价格1.8万起