我有一组带时间戳的值,我想放在一个有序的集合中.
public class TimedValue {
public Date time;
public double value;
public TimedValue(Date time, double value) {
this.time = time;
this.value = value;
}
}
用于对此集合进行排序的业务逻辑表示,值必须按降序排序,除非它比最新值早7天以上.
所以作为测试,我想出了以下代码……
DateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
TreeSet mySet = new TreeSet(new DateAwareComparator());
mySet.add(new TimedValue(dateFormatter.parse("01/01/2009"), 4.0 )); // too old
mySet.add(new TimedValue(dateFormatter.parse("01/03/2009"), 3.0)); // Most relevant
mySet.add(new TimedValue(dateFormatter.parse("01/09/2009"), 2.0));
如您所见,最初第一个值比第二个值更相关,但是一旦将最终值添加到集合中,第一个值已过期且应该是最不相关的.
我的初步测试表明这应该有效…… TreeSet会在添加更多值时动态重新排序整个列表.
但即使我看到它,我也不确定我是否相信它.
在添加每个元素时,排序的集合是否会重新排序整个集合?有没有以这种方式使用排序集合(即性能)的问题?在添加所有值后手动对列表进行排序会更好(我猜它会是这样)?
跟进:
尽可能多的(甚至在某种程度上)怀疑,排序的集合不支持这种“动态重新排序”的方式.我相信我的初步测试是“偶然”工作.随着我在集合中添加更多元素,“订单”迅速崩溃.感谢所有出色的回复,我重构了我的代码以使用许多人建议的方法.