1

是否可以使用比较器序列化 TreeMap?

我已经测试过,它可以很好地序列化没有比较器的树形图,当您添加比较器时,它会引发异常。

如果我将比较器声明为瞬态,它仍然不起作用。仅当我使每个树图都瞬态时才有效,但在这种情况下它不会序列化树。

4

5 回答 5

8

您尝试序列化的所有类都必须实现该java.io.Serializable接口。此外,您的类中的每个成员变量都应该是Serializable. 事实上,你的整个层次结构应该是。

于 2009-12-06T20:15:36.080 回答
0

如需更多帮助,请查看。其他需要考虑的事项(如本文档和其他地方所述):

  • 版本控制
  • 对象的自定义序列表格
  • 对象的哪些字段应该被序列化,哪些是瞬态的
于 2009-12-06T20:21:27.387 回答
0

TreeMap 在这里没有做任何特别的事情。如果可以序列化的 TreeMap 和不序列化的 TreeMap 之间的唯一区别是您的比较器......那么您的比较器是不可序列化的。

你是如何实现比较器的?您的瞬态声明对没有瞬态引用的 TreeMap 类毫无意义。

异常说明了什么?

于 2009-12-07T00:30:22.930 回答
0

java.util.TreeMap不是问题,您的比较器可能是。

您需要做的就是重写您的比较器类

// throws a 'java.io.NotSerializableException'
class ThisIsNotSerializable implements Comparator<String> {
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
}

class ThisIsSerializable implements Comparator<String>, Serializable {
    private static final long serialVersionUID = -5972458403679726498L;

    public int compare(String arg0, String arg1) {
        return arg0.compareTo(arg1);
    }
}

更多信息和来源

于 2019-11-27T14:57:33.253 回答
-1

您可能会发现将 Comparator 字段更改为静态成员而不是实例成员一样简单:

public final static Comparator<String> ID_IGN_CASE_COMP

您需要确保所有其他字段都是可序列化的,但这应该是一个开始。

于 2009-12-06T20:56:32.427 回答