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

Java 在动态三维数组上存储两个数组列表的值,java,arrays,arraylist,multidimensional-array,data-structures,Java,Arrays,Arraylist,Multidimensional Array,Data Structures,我将以下数据存储在两个数组列表中,这些数据显示了房间内有人打开和关闭灯光的确切时间和日期: 2015-11-09T10:04:22 1 2015-11-09T11:45:140 2015-11-09T11:45:32 1 2015-11-09T15:13:56 0 2015-11-10T10:17:17 1 2015-11-10T11:20:04 0 2015-11-10T12:28:41 1 2015-11-10T13:04:46 0 2015-11-10T13:05:48 1 2015-11

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

  • 2015-11-09T10:04:22 1
  • 2015-11-09T11:45:140
  • 2015-11-09T11:45:32 1
  • 2015-11-09T15:13:56 0
  • 2015-11-10T10:17:17 1
  • 2015-11-10T11:20:04 0
  • 2015-11-10T12:28:41 1
  • 2015-11-10T13:04:46 0
  • 2015-11-10T13:05:48 1
  • 2015-11-10T13:35:15 0
  • 2015-11-11T13:10:04 1
  • 2015-11-11T15:46:18 0
  • 第一个数组列表包含日期时间,第二个数组列表包含显示是否有人打开/关闭灯光的值

    我想将数据排序到一个动态三维数组中,其中日期(不含时间)将是关键,对于每个日期,我可以存储观察到变化的时间以及变化的类型(本例中为0或1)


    我应该使用什么类型的数据结构?我希望得到一些指导

    SQL表也可以是您的选择


    您对日期筛选、时间排序和检测开/关的要求得到满足

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

  • 如果您知道要排序的日期数,那么一个
    链接列表的
    数组就足够了

  • 如果您不知道要排序的日期数,请使用
    LinkedList的
    ArrayList


  • 我想把地图当作你的使用容器的好容器。映射允许日期作为键,创建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;
        }
    }
    
    }
    
    公共类LightSwitchMain{
    公共静态void main(字符串[]args){
    Map eventContainer=new HashMap();
    //2016年1月1日9:45关灯示例)
    LocalDate eventDate1=LocalDate.of(2016,1,1);
    SwitchEvent1=新的SwitchEvent(LocalTime.of(9,45),0);
    addSwitchEvent(eventContainer、eventDate1、event1);
    //灯亮了
    SwitchEvent2=新的SwitchEvent(LocalTime.of(9,55),1);
    addSwitchEvent(eventContainer、eventDate1、event2);
    }
    静态void addSwitchEvent(映射事件容器、LocalDate事件日期、SwitchEvent事件){
    List dayEvents=eventContainer.get(eventDate);
    if(dayEvents==null){
    dayEvents=新的ArrayList();
    eventContainer.put(eventDate,dayEvents);
    }
    dayEvents.add(事件);
    }
    静态类切换事件{
    final LocalTime eventTime;//灯光开关的时间
    final int switchState;//0=off,1=on
    公共SwitchEvent(LocalTime eventTime,int switchState){
    this.eventTime=eventTime;
    this.switchState=开关状态;
    }
    }
    }
    
    所以,你的问题是“使用什么数据结构?”是的,你有什么想法吗?@3D数组是一种可以使用的数据结构,如果这是“我想将数据排序为动态三维数组”的要求。是的,但我希望它是动态的,因为我不知道每个日期会有多少更改。本质上,我在寻找类似于三维数组列表的东西。非常感谢。这真的很有帮助!请让我理解一下,你能解释一下为什么你选择了另一个答案吗?哦,对不起,我以为我可以选择多个答案。我现在选择了你的:)谢谢。如果你觉得任何或所有答案对你有用,你都可以投上一票。