Java中内存缓存的String的唯一表示形式

时间:2016-06-15 19:54:01

标签: java json

我正在尝试构建内存缓存(在Java 8中使用ConcurrentHashMap)。键值对将是一个json字符串,并且是该字符串上复杂操作的结果。

目标是不是每次都进行复杂的操作,只有在json字符串发生变化时才会这样做。

是否有一种方法可以唯一地表示此字符串,因为任何json键的值都可以随时在应用程序中更改。

我查了hashCode()方法,但看到了它的缺点。

现在我正在尝试查看字符串的MD5表示是否可以作为JSON字符串的一个好键。

如果有人遇到过这种情况,请您提供意见吗?

2 个答案:

答案 0 :(得分:2)

据我了解,java String实例是final(不可变),因此即使JSON对象是一个非常长的字符串,String类也只计算一次String的hashCode(在构造时或首次使用i)不记得了) - 并将其作为String生命周期的实例属性。因此,使用JSON对象作为并发HashMap中的键和值,没有问题(在性能损失方面)。这与java“Set”的工作原理完全相同,由Map支持。

答案 1 :(得分:0)

这应该是Cacheonix的一项简单任务,您可以节省构建自己的缓存解决方案的时间:

Cache<String, ResultOfCalculation> cache = Cacheonix.getInstance().getCache("my.cache");
cache.put(myJsonString, myResultofCalcualtion);
...
ResultOfCalculation result = cache.get(myJsonString);