我需要实现以下功能。我愿意使用最好的类,但我不确定是否应该使用SortedSet或TreeSet(如Set myEmailsAscending = new TreeSet(new DateAscendingComparator()); //电子邮件总是按升序排列。)
public void addEmail(Email email)//The prototype isn't to be altered.
{
Comparator comp;
if(getCurrentSortingMethod()=="DateDescending") comp=DateDescendingComparator;
else if(getCurrentSortingMethod()=="DateAscending") comp=DateAscendingComparator;
...//other comparators
int index = Collections.binarySearch(getEmails(), email, new comp());// Search where to insert according to the current sorting method.
getEmails().add(-index-1, email);}// Add the item to the list
}
这是选择比较器的正确语法吗? 我想避免创建多个Comparator类,所以有没有办法做到这一点?
答案 0 :(得分:1)
有几个问题:
您应该使用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);
请注意new
块中if
的移动方式。
作为所有这些的替代方案,您可以使用SortedSet<Email>
和适当的比较器。该集将自动按正确的顺序排序。
答案 1 :(得分:0)
在类构造函数中接受Comparator和/或为其提供setter。
然后在addEmail(Email email)
内使用比较器。如果没有设置比较器,则使用自然排序。
查看TreeSet以及它如何处理比较器和自然排序。尝试将其调整为您自己的列表实现。