为什么比较器应该实现可序列化?

Java 新手。在开发安卓应用程序时学习它。我正在实现一个比较器来对文件列表进行排序,android文档比较器应该实现可序列化:

建议比较器实现可序列化。

这是此处的可序列化接口。

我只想对文件列表进行排序。我为什么要实现这个,或者为什么它应该用于任何比较器的原因是什么?


答案 1

这不仅仅是Android的事情,Java SDK也有相同的建议

注意:比较器通常还实现java.io.Serializable是一个好主意,因为它们可以用作可序列化数据结构(如TreeSet,TreeMap)中的排序方法。为了使数据结构成功序列化,比较器(如果提供)必须实现可序列化。

因此,我们的想法是,因为树状图是可序列化的,并且树状图可以包含比较器,因此如果比较器也是可序列化的,那就太好了。这同样适用于集合中的所有元素。

您可以安全地忽略这一点,除非您以这种方式使用序列化。


答案 2

可序列化是一个空白接口。它不包含任何方法。所以,要实现它,你需要说的就是在一个类中。这对你来说不是一个巨大的负担。如果你扩展,你甚至不需要实现,因为超类为你做了,然后你根本不需要做任何事情来实现。implements SerializableComparatorSerializableSerializable

当某些东西实现时,这意味着对象可以随意变成一个字节数组。这用于通过互联网传输,存储在文件中等。粗略地说,默认情况下,序列化对对象的工作方式是获取您尝试序列化的对象引用的每个对象,将每个这样的对象转换为一个字节数组(即以递归方式调用其序列化),并连接字节数组以生成表示整个对象的字节数组。Serializable

现在,为什么要实现?假设您希望序列化一个或其他一些有序的.序列化的目标是提供对象的完整表示形式。集合中包含一个对象,因此为了能够生成捕获此类集合各个方面的字节数组,您还需要能够将其另存为字节数组。因此,需要以便可以正确序列化其他内容。ComparatorSerializableTreeMapCollectionTreeMapComparatorComparatorComparatorSerializable