I*******o 发帖数: 53 | 1 SortedSet有这么一个Comparator Accessor method:
Comparator super E> comparator();
关于这个Comparator Accessor,Java tutorial里面的解释是这样的:
==================
http://java.sun.com/docs/books/tutorial/collections/interfaces/sorted-set.html
The SortedSet interface contains an accessor method called comparator
that returns the Comparator used to sort the set, or null if the set is
sorted according to the natural ordering of its elements. This method is
provided so that sorted sets can be copied into new s |
g*****g 发帖数: 34805 | 2 SortedSet is an interface, TreeSet is an implementing class.
As far as I know, interface can only have public methods.
previously.
【在 I*******o 的大作中提到】 : SortedSet有这么一个Comparator Accessor method: : Comparator super E> comparator(); : 关于这个Comparator Accessor,Java tutorial里面的解释是这样的: : ================== : http://java.sun.com/docs/books/tutorial/collections/interfaces/sorted-set.html : The SortedSet interface contains an accessor method called comparator : that returns the Comparator used to sort the set, or null if the set is : sorted according to the natural ordering of its elements. This method is : provided so that sorted sets can be copied into new s
|
I*******o 发帖数: 53 | 3 那么这就涉及2个问题了
Q1: comparator()作为public method的话,有用途么?
Q2:如果comparator()没有其他用途,实际上只是为了给constructor用一下,
却因为是interface method而不得不成为public,这个算是违反encapsulation原则了
吧?
是否有另外一个mechanicsm/pattern可以做到类似的框架,却把comparator()给封装起
来?
【在 g*****g 的大作中提到】 : SortedSet is an interface, TreeSet is an implementing class. : As far as I know, interface can only have public methods. : : previously.
|
g*****g 发帖数: 34805 | 4 Sure, one usage is to check if this SortedSet has a comparator,
null means no and SortedSet falls back to Set. You may also
want to check what kind of Comparator this is, different comparator leads
to different sequence.
if(treeSet.comparator() instanceof ...)
【在 I*******o 的大作中提到】 : 那么这就涉及2个问题了 : Q1: comparator()作为public method的话,有用途么? : Q2:如果comparator()没有其他用途,实际上只是为了给constructor用一下, : 却因为是interface method而不得不成为public,这个算是违反encapsulation原则了 : 吧? : 是否有另外一个mechanicsm/pattern可以做到类似的框架,却把comparator()给封装起 : 来?
|
m******t 发帖数: 2416 | 5
Say you are writing your own SortedSetImpl, according to the contract
defined in SortedSet (see the javadoc), SortedSetImpl is supposed to have "a
constructor with a single argument of type SortedSet, which creates a new
sorted set with the same elements and the same ordering as the input sorted
set"
So in order to replicate the ordering, at some point inside SortedSetImpl(
SortedSet original) you would need to call origin.comparator() to get the
same comparator and use that to sort.
It can be
【在 I*******o 的大作中提到】 : 那么这就涉及2个问题了 : Q1: comparator()作为public method的话,有用途么? : Q2:如果comparator()没有其他用途,实际上只是为了给constructor用一下, : 却因为是interface method而不得不成为public,这个算是违反encapsulation原则了 : 吧? : 是否有另外一个mechanicsm/pattern可以做到类似的框架,却把comparator()给封装起 : 来?
|
r*****l 发帖数: 2859 | 6
狭义地说,comparator()的返回值是给“别的class的”
constructor用的。不是给自己用的。所以不能是private。
maticfat解释得比较清楚了。
广义地说,comparator()的意义是告诉别人“我是怎样排序的”。
如果comparator()的返回值是null,那么这个SortedSet里面的
element必须implements Comparable(),SortedSet用Comparable()
排序。
【在 I*******o 的大作中提到】 : 那么这就涉及2个问题了 : Q1: comparator()作为public method的话,有用途么? : Q2:如果comparator()没有其他用途,实际上只是为了给constructor用一下, : 却因为是interface method而不得不成为public,这个算是违反encapsulation原则了 : 吧? : 是否有另外一个mechanicsm/pattern可以做到类似的框架,却把comparator()给封装起 : 来?
|