Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在HashMap中使用长字符串键还是短字符串键更好?_Java_Key_Hashmap - Fatal编程技术网

Java 在HashMap中使用长字符串键还是短字符串键更好?

Java 在HashMap中使用长字符串键还是短字符串键更好?,java,key,hashmap,Java,Key,Hashmap,在HashMap中使用长字符串键还是短字符串键更好 例如: 1.HashMap中的长字符串键 HashMap map=newhashmap(); map.put(“[ART.117.4002]适配器运行时(适配器服务):无法调用适配器服务”,“无法调用适配器服务”); 注:长字符串的最大字符数限制为120个字符,且全部大写。如果长度超过最大字符数,则会将其截断 2.HashMap中的短字符串键 HashMap map=newhashmap(); put(“B8B77715”,“无法调用适配器服

在HashMap中使用长字符串键还是短字符串键更好

例如:

1.HashMap中的长字符串键
HashMap map=newhashmap();
map.put(“[ART.117.4002]适配器运行时(适配器服务):无法调用适配器服务”,“无法调用适配器服务”);
注:长字符串的最大字符数限制为120个字符,且全部大写。如果长度超过最大字符数,则会将其截断

2.HashMap中的短字符串键
HashMap map=newhashmap();
put(“B8B77715”,“无法调用适配器服务”);
注:B8B77715是“第117.4002条适配器运行时(适配器服务):无法调用适配器服务”的CRC32


假设HashMap中有4000多个条目。就性能而言,两者中哪一个更好?

很难想象这可能有什么关系。使用最有意义的东西。

很难想象这会有什么影响。使用最合理的方法。

CRC32是原始值的粗略近似值,但两个不同的原始值可能会产生相同的CRC32值。这使得它们很难作为
HashMap
的密钥,而且它降低了数据完整性这一事实应该胜过任何潜在的性能问题。一定要使用
[ART.117.4002]…
——为什么在不需要的时候引入一个潜在的(如果罕见的)bug


话虽如此,开头部分(方括号之间)看起来可能是唯一标识符。如果是这样的话,您可以通过使用括号之间的标记(通过字符串解析)而不是整个大字符串来看到一些(非常边际的)性能提升。

CRC32是原始值的粗略近似值,但两个不同的原始值可能会产生相同的CRC32值。这使得它们很难作为
HashMap
的密钥,而且它降低了数据完整性这一事实应该胜过任何潜在的性能问题。一定要使用
[ART.117.4002]…
——为什么在不需要的时候引入一个潜在的(如果罕见的)bug


话虽如此,开头部分(方括号之间)看起来可能是唯一标识符。如果是这样的话,您可以通过使用括号之间的标记(通过字符串解析)而不是整个大字符串来看到一些(非常边际的)性能提升。

+1:使用哈希的哈希不会提高系统的性能,可能会降低其可靠性。所以您都建议使用长字符串作为密钥?可以吗?因为从逻辑上讲,如果HashMap中有很多条目,它会占用很多内存空间。@suud,最重要的一点是CRC32最终会导致程序中断。因此,应该立即将该选项抛出窗口。下一个(可能的)考虑因素是键的大小。在这一点上,这要看情况而定。您希望有多少个唯一的密钥?我想说的是,如果你的钥匙有几千把的话,那么这个(适度的)尺寸就没有什么意义了。如果你最终有数百万,你可能想考虑一个优化(但不是CRC32解决方案!)但是不幸的是,关键字符串并不总是在括号中有一个唯一的标识符,或者它可以是这样的:“java. NET.SokCimeTimeExtExt:Read Timeout”或“BotjayDelpDeTyMeMyAulaFieldFunt”。那么您实际可以预期有多少个唯一的密钥?+1:使用散列的散列不会提高系统的性能,可能会降低系统的可靠性。所以您都建议使用长字符串作为密钥?可以吗?因为从逻辑上讲,如果HashMap中有很多条目,它会占用很多内存空间。@suud,最重要的一点是CRC32最终会导致程序中断。因此,应该立即将该选项抛出窗口。下一个(可能的)考虑因素是键的大小。在这一点上,这要看情况而定。您希望有多少个唯一的密钥?我想说的是,如果你的钥匙有几千把的话,那么这个(适度的)尺寸就没有什么意义了。如果你最终有数百万,你可能想考虑一个优化(但不是CRC32解决方案!)但是不幸的是,关键字符串并不总是在括号中有一个唯一的标识符,或者它可以是这样的:“java. NET.SokCimeTimeExtExt:Read Timeout”或“BotjayDelpDeTyMeMyAulaFieldFunt”。那么,您可以实际预计有多少个独特的关键点?
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("[ART.117.4002] ADAPTER RUNTIME (ADAPTER SERVICE): UNABLE TO INVOKE ADAPTER SERVICE", "Cannot invoke adapter service");
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("B8B77715", "Cannot invoke adapter service");