【问题标题】:Storing the values of two array lists on a dynamic 3 dimensional array将两个数组列表的值存储在动态 3 维数组上
【发布时间】:2018-08-05 03:33:44
【问题描述】:

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

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

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

我想将数据排序到一个动态的三维数组中,其中日期(不包括时间)将是关键,并且对于每个日期,我可以存储我观察到变化的时间以及它是什么类型的变化(0 或1 在这种情况下)。

我应该使用什么类型的数据结构?我会很感激一些指导。

【问题讨论】:

  • 那么,您的问题是“使用什么数据结构?”
  • 是的,你有什么想法吗?
  • @A 3D 数组是您可以使用的数据结构,如果这是“我想将数据排序为动态三维数组”的要求。
  • 是的,但我希望它是动态的,因为我不知道每个日期会有多少变化。本质上,我正在寻找类似 3 维数组列表的东西。

标签: java arrays arraylist multidimensional-array data-structures


【解决方案1】:

我认为 Map 是您用例的良好容器。地图允许日期作为键,创建 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;
    }
}

}

【讨论】:

  • 非常感谢。这真的很有帮助!
  • 请理解,您能解释一下为什么选择其他答案吗?
  • 哦,对不起,我以为我可以选择多个答案。我现在选择了你的 :)
  • 谢谢。如果您觉得这些答案对您有用,您可以随时投票任何或所有答案。
【解决方案2】:

SQL 表也可以是您的选择。

满足您对日期过滤、时间排序和检测开/关的要求。

【讨论】:

    【解决方案3】:

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

    1. 如果您知道要排序的日期数,那么 arrayLinkedList 就足够了。

    2. 如果您不知道要排序的日期数,请使用 ArrayListLinkedList

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多