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
我应该使用什么类型的数据结构?我希望得到一些指导 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数组是一种可以使用的数据结构,如果这是“我想将数据排序为动态三维数组”的要求。是的,但我希望它是动态的,因为我不知道每个日期会有多少更改。本质上,我在寻找类似于三维数组列表的东西。非常感谢。这真的很有帮助!请让我理解一下,你能解释一下为什么你选择了另一个答案吗?哦,对不起,我以为我可以选择多个答案。我现在选择了你的:)谢谢。如果你觉得任何或所有答案对你有用,你都可以投上一票。