我正在尝试构建内存缓存(在Java 8中使用ConcurrentHashMap
)。键值对将是一个json字符串,并且是该字符串上复杂操作的结果。
目标是不是每次都进行复杂的操作,只有在json字符串发生变化时才会这样做。
是否有一种方法可以唯一地表示此字符串,因为任何json键的值都可以随时在应用程序中更改。
我查了hashCode()
方法,但看到了它的缺点。
现在我正在尝试查看字符串的MD5表示是否可以作为JSON字符串的一个好键。
如果有人遇到过这种情况,请您提供意见吗?
答案 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);