这个问题在采访中被问到。问题是为什么Strin
g和其他包装类实现Comparable
而不是Comparator
接口。我试图解释Comparator
基本上是提供自定义排序,Comparable
是默认的自然排序顺序。同样从设计原理角度来看,Comparable
紧密耦合且Comparator
松散耦合。但是,我无法澄清为什么String
实施了Comparable
而不是Comparator
。为什么字符串实现可比较而不是比较器接口
回答
字符串执行器Comparable
因为它们是可以比较的东西。一般来说,实现Comparable
的东西往往具有自然顺序,就像你提到的那样。
A Comparator
是一种比较事物的方式。当你创建一个比较器时,你正在定义一个用来比较事物的方法。你可以让一个给定类型的比较器以不同的方式进行比较。
我上面提到了一些关于自然排序的内容。是的,但我认为我们可以通过重写compareTo()方法来轻松修改此顺序。我的意思是从实施到实施都有所不同。它不是特定于Comparable或Comparator。字符串是一个可变类,并以这种方式实现,它总是给你自然顺序排序。 – RoyalTiger
您可以通过覆盖compareTo来修改排序,但对于实现Comparable的每个类,只能有一个定义的排序,因为您必须选择特定的方式来编写compareTo。但是,您可以使几个比较器比较特定类的对象,每个比较器可以定义不同的顺序。查看其他可比较的比较问题以获取更多信息。 – John
- 1. 实现比较器接口
- 2. 我可以使用比较器而不实现可比较吗?
- 3. 为什么整数比较比字符串比较快?
- 4. 可比较和比较器接口
- 5. 比较器为什么要实现Serializable?
- 6. 比较器作为静态字段 - 接口还是实现?
- 7. 在java中实现比较器接口
- 8. 在android中实现字符串比较
- 9. 我可以调用binarySearch方法而不实现比较器/可比较吗?
- 10. 与整数比较相比,为什么字符串比较如此之快?
- 11. 记录连接:比较字符串比较器
- 12. 比较器实现
- 13. 字符串比较没有比较
- 14. 为什么这个字符串比较器不能编译?
- 15. 字符串比较
- 16. 比较字符串
- 17. 比较字符串
- 18. 字符串比较
- 19. 字符串比较
- 20. 字符串比较
- 21. 比较字符串
- 22. 比较字符串
- 23. 字符串比较
- 24. 比较字符串
- 25. 字符串比较
- 26. 比较字符串
- 27. 字符串比较
- 28. 字符串比较
- 29. 字符串比较?
- 30. SQL - 比较字符串,而不是整个字符串
其他半副本:“[何时应该类是Comparable和/或Comparator?](https://stackoverflow.com/questions/1440134)”和“[compare()和compareTo( )?](https://stackoverflow.com/questions/420223)”。不幸的是,对于这个......没有规范的复制目标问题......只有少量的适度复制的相互复制。 –