Java 如何实现基于多个比较器的排序列表add();参数化比较器?
我需要实现以下功能。我愿意使用最好的类,但我不确定是应该使用SortedSet还是TreeSet(如Set-myEmailsAscending=new-TreeSet(new-DateAscendingComparator());//电子邮件总是按升序排列) 这是选择comparator的正确语法吗?Java 如何实现基于多个比较器的排序列表add();参数化比较器?,java,insert,comparator,Java,Insert,Comparator,我需要实现以下功能。我愿意使用最好的类,但我不确定是应该使用SortedSet还是TreeSet(如Set-myEmailsAscending=new-TreeSet(new-DateAscendingComparator());//电子邮件总是按升序排列) 这是选择comparator的正确语法吗? 我希望避免创建多个Comparator类,那么有没有办法做到这一点?有几个问题: 您应该使用equals()进行字符串比较,而不是= new的用法是错误的。我建议如下: Comparator co
我希望避免创建多个Comparator类,那么有没有办法做到这一点?有几个问题: 您应该使用
equals()
进行字符串比较,而不是=
new
的用法是错误的。我建议如下:
Comparator comp;
if (getCurrentSortingMethod().equals("DateDescending")) {
comp = new DateDescendingComparator();
} else if (getCurrentSortingMethod().equals("DateAscending")) {
comp = new DateAscendingComparator();
} ...
int index = Collections.binarySearch(getEmails(), email, comp);
注意新的是如何在if
块中移动的
作为所有这些的替代方案,您可以使用带有适当比较器的。集合将自动按正确顺序排序。在类构造函数中接受比较器和/或为其提供setter。
然后只需使用addEmail(电子邮件)
中的比较器即可。如果未设置比较器,则使用自然排序
看看它是如何处理比较器和自然排序的。尝试根据您自己的列表实现对其进行调整。为什么不只使用树集,它将为您做所有事情?设置myEmailsAscending=new TreeSet(new DateAscendingComparator());//电子邮件总是以升序排列,但我以后如何更改一组电子邮件的顺序?这将如何影响这个函数add()?当用户切换时,可以将一个集合的内容转储到另一个集合中。或者两者都保留,插入其中,记住哪一个代表“当前”排序。我愿意使用最好的类,但我不确定是否应该使用SortedSet或TreeSet(如上在Set myEmailsAscending=new TreeSet中所述)。TreeSet
is-aSortedSet
。后者是一个接口,前者是一个具体的实现。但我以后如何更改一组电子邮件的顺序呢?这将如何影响这个函数add()?原型不会被改变。
Comparator comp;
if (getCurrentSortingMethod().equals("DateDescending")) {
comp = new DateDescendingComparator();
} else if (getCurrentSortingMethod().equals("DateAscending")) {
comp = new DateAscendingComparator();
} ...
int index = Collections.binarySearch(getEmails(), email, comp);