我目前正在制作一个自定义序列化程序,作为项目的一部分。在这里,我需要对引用进行序列化,这意味着如果两个字段在序列化之前引用同一个项目,则在反序列化后也应该如此。
为此,我使用了HashMap,将每个对象映射到一个ID,我可以将其用作每个序列化对象的属性,同时跟踪哪些对象已经被序列化。然而,我遇到了一些问题。
似乎Java HashMap仅在键上检查相等性,而不检查它们是否是相同的引用。例如,在下面的示例中,变量b最终为true:
HashMap<Object, Integer> map = new HashMap<Object, Integer>();
LinkedList<Object> ll1 = new LinkedList<Object>();
LinkedList<Object> ll2 = new LinkedList<Object>();
map.put(ll1, 5);
boolean b = map.containsKey(ll2);
有时结果完全没有意义。在这里,b也是true:
HashMap<Object, Integer> map = new HashMap<Object, Integer>();
LinkedList<Object> ll1 = new LinkedList<Object>();
Stack<Object> stack = new Stack<Object>();
map.put(ll1, 5);
boolean b = map.containsKey(stack);
我希望ContainsKey方法不仅调用equals方法,还要使用“==”运算符检查引用是否相同。我能否在无需查看整个键集的情况下实现这一点?
提前致谢。