与字符串相比,整数在java HashMap中作为键占用的空间少吗?
假设我有一个与字符串相比,整数在java HashMap中作为键占用的空间少吗?,java,string,hash,hashmap,Java,String,Hash,Hashmap,假设我有一个HashMap,其中键是单词,值是它们在语料库中的频率。将单词替换为某个整数(例如,“hello”由1表示)并创建HashMap,是否节省内存?通常,整数比字符串占用更少的空间,但我不知道这是否适用于HashMap的键,因为键通过哈希函数。提前谢谢 就HashMap而言,用Integer替换String时,内存使用没有区别 这是因为HashMap将键和值的参考值存储在其KV对中,而不是引用String对象,键将引用Integer对象 出于所有目的,对Integer对象和String对
HashMap
,其中键是单词,值是它们在语料库中的频率。将单词替换为某个整数(例如,“hello”
由1
表示)并创建HashMap
,是否节省内存?通常,整数比字符串占用更少的空间,但我不知道这是否适用于HashMap的键,因为键通过哈希函数。提前谢谢 就HashMap
而言,用Integer
替换String
时,内存使用没有区别
这是因为HashMap
将键和值的参考值存储在其KV对中,而不是引用String
对象,键将引用Integer
对象
出于所有目的,对
Integer
对象和String
对象进行散列不会对HashMap的存储能力产生任何影响。当然可以。即使字符串为空,整数也比字符串小,因为“int”小于对“char[]”的引用加上偏移量、长度和哈希代码的更多“int”。如果使用Integer.valueOf()还可以进行缓存,当然也可以通过常量池进行字符串缓存
然而,除非你有数以百万计的条目,否则效果可以忽略不计,所以你应该选择适合程序的任何键。java中Intger的哈希代码等于该值,因此我假设它更有效“就哈希映射而言”,这都是真的,但这不是他的问题。实际上,这似乎是他的问题,@EJP。你的答案无关紧要。Java对象(Integer和String都是)通过引用传递(并作为引用维护)。我说了一句话:“一般来说,整数占用的空间比字符串少,但我不知道这是否适用于HashMap的键,因为键通过哈希函数传递。”我的回答是HashMap的键不受键类型大小的影响,因为它只是一个引用。