【发布时间】:2018-07-18 19:23:43
【问题描述】:
我正在使用存储 JSONObjects 的 Hashset。 我知道 hashset 使用 hashCode() 和 equals 方法来确定对象是否重复。
检查后我可以看到相同的 JSONObject 返回 2 个不同的 hascode,即使 equals() 和similar() 返回 true,这基本上意味着 JSONObject 没有正确覆盖 hashcode()。
我知道如果不正确使用像 Gson 或 Jackson 这样的库,我可能会解决这个问题,但我的代码在使用 JSONObject 方面投入了大量精力,并将所有代码重构为使用其中一个库将花费 2 很多时间。
我的问题 - 有没有办法设置 hashSet 方式来决定重复项?
类似
HashSet<JSONObject> hs = new HashSet();
hs.setDuplicateStrategy((o1, o2) => { o1.similar(o2)});
欢迎任何其他解决方案
【问题讨论】:
-
你能用
Set<JSONObject> hs = new TreeSet<>(jsonObjectComparable);吗? -
这意味着我必须将 JSONObject 包装在我自己的实现 Comparable 的对象中,对吗?
-
我没能实现你写的,“jsonObjectComparable”在你的代码中是什么意思?它是一个实现可比较的新对象,那是它的一个实例吗?如果您进一步解释您的解决方案,我将不胜感激
-
对不起,我的意思是
Comparator<JSONObject>,它允许您具体说明这些对象的比较方式以及它们何时相等。 -
我不知道这是否正是你的意思,但我写了一个答案来展示我设法做的事情和工作,请随时评论任何你认为我的解决方案有问题的地方,我会接受它作为2天内答复