首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在动态三维数组上存储两个数组列表的值

在动态三维数组上存储两个数组列表的值
EN

Stack Overflow用户
提问于 2018-02-25 16:14:38
回答 3查看 58关注 0票数 2

我有以下数据,这些数据显示了某人打开或关闭房间中的灯的确切时间和日期,这些数据存储在两个数组列表中:

  1. 2015-11-09 T10:04:22 1
  2. 2015-11-09 T11:45:14 0
  3. 2015-11-09 T11:45:32 1
  4. 2015-11-09 T15:13:56 0
  5. 2015-11-10 T10:17:17 1
  6. 2015-11-10 T11:20:04 0
  7. 2015-11-10 T12:28:41 1
  8. 2015年-11-10 T13:04:46 0
  9. 2015-11-10 T13:05:48 1
  10. 2015年-11-10 T13:35:15 0
  11. 2015-11-11T13:10:04 1
  12. 2015年-11-11T15:46:18 0

第一个数组列表包含日期时间,第二个数组列表包含显示某人打开/关闭灯的值。

我希望将数据排序为一个动态的三维数组,其中日期(没有时间)将是关键,对于每个日期,我可以存储我观察到的更改的时间以及它是什么类型的更改(在本例中为0或1)。

我应该使用什么类型的数据结构?我希望你能给我一些指导。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-25 17:13:27

我认为Map是一个很好的用例容器。映射允许日期作为键,创建一个SwitchEvent类(保持时间和开关状态打开/关闭)允许使用列表来存储每天的事件。

代码语言:javascript
运行
复制
Map<LocalDate, List<SwitchEvent>> eventContainer

示例用法如下:

代码语言:javascript
运行
复制
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;
    }
}

}
票数 0
EN

Stack Overflow用户

发布于 2018-02-25 17:04:40

您还可以选择使用SQL表。

您对筛选日期、按时间排序和检测on/off的要求得到了满足。

票数 0
EN

Stack Overflow用户

发布于 2018-02-25 17:06:53

考虑到的数据结构是LinkedListArrayList。这里你有两个选择。

  1. 如果您知道要排序的日期的数量,那么array of LinkedList就足够了。
  2. 如果您不知道要排序的日期的数量,那么可以使用ArrayList of LinkedList
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48975611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档