哈希表

Redis复习

余生长醉 提交于 2020-03-26 14:52:08
整数集合: 集合键的底层实现, 数据类型取决于声明的属性 压缩列表 列表和哈希底层实现 吃句话 RDB 一致性哈希的优势 来源: https://www.cnblogs.com/HHHzhihao/p/12573895.html

Redis Hash和List常用命令

扶醉桌前 提交于 2020-03-25 13:30:59
Redis Hash和List常用命令 Hash 1. HSET 命令 127.0.0.1:6379> hset book history "story" (integer) 1 2. HSETNX 命令:为哈希表不存在的域设值 使用 HSETNX 命令当且仅当域 field 不存在时,将哈希表 key 中的 field 的值设置为 value。如果 field 已经存在,那么 HSETNX 命令将会执行无效。 3. HMSET 命令:设置多个域和值到哈希表中 4. HGET 命令:获取哈希表中域的值 5. HGETALL 命令:获取哈希表中所有的域和值 6. HMGET 命令:获取多个域的值 127.0.0.1:6379> hget book history "story" 127.0.0.1:6379> hgetall book 1) "history" 2) "story" 7. HKEYS 命令:获取哈希表中的所有域 8. HVALS 命令:获取哈希表中所有域的值 9. HLEN 命令:统计哈希表中域的数量 127.0.0.1:6379> hlen book (integer) 1 10. HSTRLEN 命令:统计域的值的字符串长度 11. HINCRBY 命令:为哈希表中的域加上增量值 12. HINCRBYFLOAT 命令:为哈希表中的域加上浮点数增量值 13.

第一个只出现一次的字符

自闭症网瘾萝莉.ら 提交于 2020-03-25 00:23:27
问题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这个问题最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出 现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂度是O(n 2 )。 由于题目与字符出现的次数相关,我们是不是可以统计每个字符在该字符串中出现的次数?要达到这个目的,我们需要一个数据容器来存放每个字符的出现次数。在这个数据容器中可 以根据字符来查找它出现的次数,也就是说这个容器的作用是把一个字符映射成一个数字。在常用的数据容器中,哈希表正是这个用途。 哈希表是一种比较复杂的数据结构。由于比较复杂,STL中没有实现哈希表,因此需要自己实现一个。但由于本题的特殊性,只需要一个非常简单的哈希表就能满足要求。由于字符 (char)是一个长度为8的数据类型,因此总共有可能256 种可能。于是创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项,而数组中存储的 是每个字符对应的次数。这样我们就创建了一个大小为256,以字符ASCII码为键值的哈希表。第一遍扫描这个数组时,每碰到一个字符,在哈希表中找到对应的项并把出现的次数增 加一次。这样在进行第二次扫描时

Java集合HashMap集合

不羁岁月 提交于 2020-03-24 04:55:44
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外, HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素正确分布在各桶之间,可为基本操作( get 和 put )提供稳定的性能。迭代集合视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)的和成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。 HashMap 的实例有两个参数影响其性能: 初始容量 和 加载因子 。 容量 是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。 加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用 rehash 方法将容量翻倍。 通常,默认加载因子 (.75) 在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 get 和 put 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地降低 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生

as必须注意的地方

℡╲_俬逩灬. 提交于 2020-03-23 16:38:58
你是as3老鸟吗?如果以下内容对你有莫大的帮助,请顶下! 一:加载swf库中的图片 new 的过程就是图片解压缩的过程。处于 Class 状态时,图片占用的内存和 SWF 文件中这个图片占用的磁盘空间一致,而一旦通过 new 解压成无压缩的 BitmapData 后,占用的内存会急剧增加。 不管是 PNG、JPG,还是矢量动画,new 之后的体积都会比原来大得多,因此不要随便将资源实例化后暂存。这个实例化过程理所当然是比较费时的,可能会出现卡的现象,但预先实例化,内存占用上是有很大区别的。 此外,如果选择设置 LoaderContext 使得全部资源加载到同一个域的话,有冲突的链接名是以先来先到的原则处理,即如果两个资源链接名相同,以先加载的对象为准。 二:将素材图片打包成一个SWF好处 打包成 SWF 有一个优点,SWF 可以让 JPEG 支持透明通道。一般来说,JPEG 压缩率高而不支持透明通道,PNG 压缩率低支持透明通道。将 PNG 导入 FLA 然后设置成 JPEG 压缩后,就能在压缩的同时保留透明通道,可以让支持透明通道的图片体积大大减小。 打包成 SWF 后,加载快且易于管理,是推荐方式。但这种做法限定你必须一次性加载所有资源,不能按需加载,有一定的局限性。比较适合加载 UI 皮肤,以及需要立即显示的图标等等。 还有一点需要注意:SWF 舞台上的内容

Redis 命令,键(key),字符串(String),哈希(Hash),列表(List),集合(Set)(二)

℡╲_俬逩灬. 提交于 2020-03-21 16:55:26
Redis 命令 Redis 命令用于在 redis 服务上执行操作。 要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。 语法 Redis 客户端的基本语法为: $ redis-cli 实例 以下实例讲解了如何启动 redis 客户端: 启动 redis 客户端,打开终端并输入命令 redis-cli 。该命令会连接本地的 redis 服务。 $redis-cli redis 127.0.0.1:6379> redis 127.0.0.1:6379> PING PONG 在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。 在远程服务上执行命令 如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。 语法 $ redis-cli -h host -p port -a password 实例 以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。 $redis-cli -h 127.0.0.1 -p 6379 -a "mypass" redis 127.0.0.1:6379> redis 127.0.0.1:6379> PING PONG ------

LeetCode | 面试题03. 数组中重复的数字【剑指Offer】【Easy】【Python】【数组】【哈希表】【排序】

断了今生、忘了曾经 提交于 2020-03-17 22:54:18
LeetCode 面试题03. 数组中重复的数字【剑指Offer】【Easy】【Python】【数组】【哈希表】【排序】 问题 力扣 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 思路 解法一 哈希表 遍历数组,未出现过的标记 flag 为 True,已出现过就返回该值。 时间复杂度: O(n),n 为 nums 的长度。 空间复杂度: O(n),n 为 nums 的长度。 Python3代码 from typing import List class Solution: def findRepeatNumber(self, nums: List[int]) -> int: # solution one: 哈希表 n = len(nums) flag = [False for i in range(n)] for i in range(n): if flag[nums[i]] == False: flag[nums[i]] = True else: return nums[i] return -1

哈希表:拼写单词 (3.17 leetcode每日打卡)

偶尔善良 提交于 2020-03-17 11:00:03
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一次。 返回词汇表 words 中你掌握的所有单词的 长度之和。 示例 1: 输入:words = ["cat","bt","hat","tree"], chars = "atach" 输出:6 解释: 可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。 示例 2: 输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr" 输出:10 解释: 可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。 提示: 1 <= words.length <= 1000 1 <= words[i].length, chars.length <= 100 所有字符串中都仅包含小写英文字母 思路:今天也是刚知道哈希表的应用,就是建立一个表,根据关键值(例如ASCLL码)直接访问数据元素,然后达到快速查表的目的。本题的思路就是先把字母表的个字母数记录,然后再根每个单词进行比较

哈希表结构 笔记

ⅰ亾dé卋堺 提交于 2020-03-16 19:50:33
Hash-Table (空间换时间) 利用哈希函数生成对应的index(o(1); 利用生成的index(O(1)) 来操作指定位置的元素 O(1) 时间复杂度 Hash 冲突: 两个不同的key ,经过哈希函数计算出相同的结果解决办法: 1) 开放定址法:按照一定规则向其他地址探测,直到遇到空桶 2) 再Hash法 :利用另一个Hash函数再次计算,看是否与第一个相 3) 链地址法:通过链表将同一index的元素串起来 JDK 1.8 解决Hash冲突: 默认单向链表将元素串起来 在添加元素时有可能将单向链表转为红黑树(当哈希表容量大于64 或者链表节点数大于8) 当红黑树的节点少于一定数量后,也会转成单向链表 表为什么使用单链表? 1.挨个比较key 相同就覆盖掉 不同就尾插 2. 每次从头开始比较 3. 节省空间 比双链表少一个指针 Hash 函数: 先生成key 的哈希值 再让key 的哈希值与数组的大小进行相关的计算 生成索引值(Hash(key)要小于数组) Hash(key)%table.length 为了提高效率 ,可以将 % 更换为 & (前提是将数组的长度设计为2En) Hash(key)&(table.length-1) ——》 按照此方法得出的数字必然小于table.length (2En -1 保证数字全部是1) 良好的哈希函数: 算出的索引分布比较均匀

java.lang.OutOfMemoryError:超出了GC开销限制

心不动则不痛 提交于 2020-03-16 19:23:45
某厂面试归来,发现自己落伍了!>>> 我在一个程序中创建了这个错误,该程序创建了几个(数十万)HashMap对象,每个对象都有几个(15-20)文本条目。 这些字符串必须全部收集(不分解成较小的数量),然后再提交给数据库。 根据Sun的说法,该错误发生“如果在垃圾回收上花费了太多时间:如果在垃圾回收上花费了总时间的98%以上,而回收不到2%的堆,则将引发OutOfMemoryError。 ”。 显然,可以使用命令行将参数传递给JVM 通过“ -Xmx1024m”(或更多)增加堆大小,或 通过“ -XX:-UseGCOverheadLimit”完全禁用错误检查。 第一种方法可以很好地工作,第二种方法最后是另一个java.lang.OutOfMemoryError,这是关于堆的。 因此,问题是:对于特定的用例(例如,几个小的HashMap对象),是否有任何编程替代方法? 例如,如果我使用HashMap clear()方法,问题就会消失,但是存储在HashMap中的数据也会消失! :-) StackOverflow 的 相关主题中 也讨论了此问题 。 #1楼 这帮助我摆脱了这个错误。此选项禁用-XX:+ DisableExplicitGC #2楼 使用替代的HashMap实现( Trove )。 标准Java HashMap具有大于12倍的内存开销。 人们可以 在这里 阅读详细信息。