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。它看起来会更干净。