比较器为什么要实现Serializable?

Bjo*_*orn 39 java sorting serialization android comparator

Java新手.在使用Android应用程序时学习它.我正在实现一个比较器来对文件列表进行排序,并且android文档比较器应该实现Serializable:

建议Comparator实现Serializable.

这是Serializable接口在这里.

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

Thi*_*ilo 50

这不仅仅是一个Android的东西,Java SDK也有同样的建议:

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

因此,我们的想法是,因为TreeMap是可序列化的,而TreeMap可以包含一个Comparator,所以如果Comparator也是可序列化的,那将是很好的.这同样适用于集合中的所有元素.

除非以这种方式使用序列化,否则您可以放心地忽略它.


Anu*_*ora 9

这应该可以帮到你:http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

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


Gra*_*ity 9

Serializeable是一个空白界面.它不包含任何方法.所以,要实现它,你需要说的就是implements Serializable在课堂上.这对你来说不是一个巨大的负担.如果你扩展Comparator,你甚至不需要实现,Serializable因为超类为你做了,然后你根本不需要做任何事情来实现Serializable.

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

现在,为什么要Comparator实施Serializable?假设您希望序列化一个TreeMap或其他一些有序的Collection.序列化的目标是提供对象的完整表示.集合中TreeMap有一个Comparator对象,因此为了能够生成捕获此类集合的每个方面的字节数组,您需要能够将其保存Comparator为字节数组.因此,Comparator需要Serializable使其他事物能够被正确地序列化.

  • "如果扩展Comparator":Comparator是一个接口(并不扩展Serializable)."要实现它,你需要说的是在类中实现Serializable"你还需要考虑这是否是正确的事情.例如,所有实例字段也需要可序列化(或者您需要采取一些措施). (4认同)