[英]Storing the values of two array lists on a dynamic 3 dimensional array
我有以下数据,这些数据显示了有人打开和关闭房间里的灯光时的确切时间和日期(存储在2个数组列表中):
第一个数组列表包含日期时间,第二个数组列表包含显示有人打开/关闭灯的值。
我想将数据分类为动态的三维数组,其中日期(无时间)将是关键,对于每个日期,我可以存储观察到变化的时间以及变化的类型(在此为0或1)案件)。
我应该使用哪种类型的数据结构? 我希望得到一些指导。
SQL表也可以作为您的选择。
您对日期过滤,时间排序和检测开/关的要求得到满足。
想到的数据结构是LinkedList
和ArrayList
。 在这里,您有两个选择。
如果知道要排序的日期数,则LinkedList
array
就足够了。
如果您不知道要排序的日期数,则使用LinkedList
的ArrayList
我认为地图是您使用案例的理想容器。 该地图将日期作为关键,并且创建SwitchEvent类(保持时间和打开/关闭开关状态)允许使用List来存储每天的事件。
Map<LocalDate, List<SwitchEvent>> eventContainer
用法示例如下:
public class LightSwitchMain {
public static void main(String[] args) {
Map<LocalDate, List<SwitchEvent>> eventContainer = new HashMap<>();
// Example of a light switch OFF on Jan 1, 2016 at 9:45)
LocalDate eventDate1 = LocalDate.of(2016, 1, 1);
SwitchEvent event1 = new SwitchEvent(LocalTime.of(9, 45), 0);
addSwitchEvent(eventContainer, eventDate1, event1);
// Light goes on
SwitchEvent event2 = new SwitchEvent(LocalTime.of(9, 55), 1);
addSwitchEvent(eventContainer, eventDate1, event2);
}
static void addSwitchEvent(Map<LocalDate, List<SwitchEvent>> eventContainer, LocalDate eventDate, SwitchEvent event) {
List<SwitchEvent> dayEvents = eventContainer.get(eventDate);
if (dayEvents == null) {
dayEvents = new ArrayList<SwitchEvent>();
eventContainer.put(eventDate, dayEvents);
}
dayEvents.add(event);
}
static class SwitchEvent {
final LocalTime eventTime; // Time of the light switch
final int switchState; // 0=off, 1=on
public SwitchEvent(LocalTime eventTime, int switchState) {
this.eventTime = eventTime;
this.switchState = switchState;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.