Java 数据结构-是否有更好的地图替代方案<;整数,列表<;列表<;日期>&燃气轮机>;?
我需要将一些数据组织到日期范围中。我有一系列的标识符,每个标识符都有一些日期范围,它是活动的。日期范围包括开始日期和结束日期,我将保存在两个日期元素的列表中。Java 数据结构-是否有更好的地图替代方案<;整数,列表<;列表<;日期>&燃气轮机>;?,java,data-structures,Java,Data Structures,我需要将一些数据组织到日期范围中。我有一系列的标识符,每个标识符都有一些日期范围,它是活动的。日期范围包括开始日期和结束日期,我将保存在两个日期元素的列表中。 最后,我有一张地图,看起来有点麻烦。有没有更好的方法保存此信息?一般来说,您可以将其分为几个类: class A { Date from; Date until; } class B { List<A> list = ... } class C { List<B> list = ... } A
最后,我有一张
地图
,看起来有点麻烦。有没有更好的方法保存此信息?一般来说,您可以将其分为几个类:
class A {
Date from;
Date until;
}
class B {
List<A> list = ...
}
class C {
List<B> list = ...
}
A类{
日期从;
日期至;
}
B类{
列表=。。。
}
C类{
列表=。。。
}
当然是有意义的名字。因此,您可以在地图中使用C
您可能在每个类级别上都有方法,因此以后您不必担心这些方法的位置-它们也正好适合此结构。一般来说,您可以将其拆分为类:
class A {
Date from;
Date until;
}
class B {
List<A> list = ...
}
class C {
List<B> list = ...
}
A类{
日期从;
日期至;
}
B类{
列表=。。。
}
C类{
列表=。。。
}
当然是有意义的名字。因此,您可以在地图中使用C
无论如何,您可能会在每个类级别上都有方法,因此以后您不必担心这些方法的位置-它们也正好适合此结构。您可以尝试guava MultiMap
ListMultimap<Integer, List<Date>> mm = LinkedListMultimap.create();
ListMultimap mm=LinkedListMultimap.create();
你可以试试番石榴多重地图
ListMultimap<Integer, List<Date>> mm = LinkedListMultimap.create();
ListMultimap mm=LinkedListMultimap.create();
如果您对加入番石榴或apache不感兴趣,这里有一个解决方案
public class DateRange {
private final Date start;
private final Date end;
public DateRange(Date start, Date end) {
this.start = start;
this.end = end;
}
public boolean contains(Date date) {
// Use whatever comparison method is best
// for your particular date objects here
return date.compareTo(start) >= 0 && date.compareTo(end) <= 0);
}
// Getters, Setters if applicable, etc.
}
如果您对包含番石榴或apache不感兴趣,这里有一个解决方案
public class DateRange {
private final Date start;
private final Date end;
public DateRange(Date start, Date end) {
this.start = start;
this.end = end;
}
public boolean contains(Date date) {
// Use whatever comparison method is best
// for your particular date objects here
return date.compareTo(start) >= 0 && date.compareTo(end) <= 0);
}
// Getters, Setters if applicable, etc.
}
我建议使用以下方法,这两种方法看起来更好(主观),而且在领域方面更为正确:
Map<Integer, List<DateRange>>
(根据需要修改限定符并添加getter/setter/methods)
额外提示:另外,我想指出,对于大多数现实世界中的日期任务,
java.util.date
和java.util.Calendar
很难使用,而且并不总是定义良好<强> >我建议你考虑使用.< /强>,它正好有一个适合你的场景的类。 我建议使用下面这两个词,这两个词看起来更好(主观),并且在域上更正确:
Map<Integer, List<DateRange>>
(根据需要修改限定符并添加getter/setter/methods)
额外提示:另外,我想指出,对于大多数现实世界中的日期任务,
java.util.date
和java.util.Calendar
很难使用,而且并不总是定义良好<强> >我建议您考虑使用.<强> >,它正好有一个类,应该适合您的场景。至于我,这个结构很好,用java的样式。最好定义您的自定义类型,它包含StasDeDATE和EnDeDATE,使用列表而不是列表。它看起来会更干净。对我来说,这种结构很好,是java风格的。最好定义包含startDate和endDate的自定义类型,并使用List而不是List。它看起来会更干净。