我有以下数据,这些数据显示了某人打开或关闭房间中的灯的确切时间和日期,这些数据存储在两个数组列表中:
第一个数组列表包含日期时间,第二个数组列表包含显示某人打开/关闭灯的值。
我希望将数据排序为一个动态的三维数组,其中日期(没有时间)将是关键,对于每个日期,我可以存储我观察到的更改的时间以及它是什么类型的更改(在本例中为0或1)。
我应该使用什么类型的数据结构?我希望你能给我一些指导。
发布于 2018-02-25 17:13:27
我认为Map是一个很好的用例容器。映射允许日期作为键,创建一个SwitchEvent类(保持时间和开关状态打开/关闭)允许使用列表来存储每天的事件。
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;
}
}
}
发布于 2018-02-25 17:04:40
您还可以选择使用SQL表。
您对筛选日期、按时间排序和检测on/off的要求得到了满足。
发布于 2018-02-25 17:06:53
考虑到的数据结构是LinkedList
和ArrayList
。这里你有两个选择。
array
of LinkedList
就足够了。ArrayList
of LinkedList
https://stackoverflow.com/questions/48975611
复制相似问题