0

我需要实现以下功能。我愿意使用最好的类,但我不确定我应该使用 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 类,那么有没有办法做到这一点?

4

2 回答 2

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

作为所有这些的替代方法,您可以将 aSortedSet<Email>与适当的比较器一起使用。该集合将自动按正确的顺序排序。

于 2012-04-24T17:40:01.033 回答
0

在您的类构造函数中接受一个比较器和/或为它提供一个设置器。然后只需在您的addEmail(Email email). 如果没有设置比较器,则使用自然排序。

看看TreeSet以及它如何处理比较器和自然排序。尝试将其调整为您自己的列表实现。

于 2012-04-24T17:47:31.260 回答