(Java)类似议程的程序的数据结构?

时间:2012-11-14 10:05:23

标签: android data-structures

简而言之,我从XML中解析了这样的数据:

root ---- date1 ---- time 1 ----item 1 ---- prop 1 --- a
       |          |          |           |         |-- b
       |          |          |           |    
       |          |          |           |- prop 2
       |          |          |    
       |          |          |--item 2
       |          |
       |          |- time 2
       |
       |
       |- date2 ---- time 1

每个item都有几个属性(比如item1有prop1和prop2)

每个time有几个item s

每个date有几个time s

root有几个date s作为其子级

我想使用这些数据:

能够向用户显示每个日期内的内容。例如如果date1是当前日期,则会显示按item排序的每个time用户,只需显示Android Google日历的日程视图等数据。

那么我可以问一下我应该用什么数据结构来实现这个目标?

我认为可能的候选人是:

  1. 嵌套的HashMap,如HashMap<Time, HashMap<item1, HashMap<prop1, a>>>;
  2. SQL数据库,为每个time创建表格,然后将item放入行,prop列中
  3. 这个应用程序完全可以在存储数据时不严格保持树状结构,所以我更喜欢SQL数据库,我可以问你那个可能更好的解决方案吗?

    这个应用程序将在Android上运行,感谢您的帮助。

    更新

    我对数据库结构的想法:

    为每个日期创建数据库表;

    然后在每个数据库表中:

            time    prop1    prop2    prop3
    item1
    item2
    ...
    

    然后我可能会在item基础上使用select来检索time

    UPDATE2 我需要为日期创建表,因为某些项可能是相同的。请想象你在一周的不同日子里举行了两次相同的会议。我无法为每个item创建表,因为很难从原始XML中提取这些信息,而不仅仅是创建date表并将它们放在数据库中。

2 个答案:

答案 0 :(得分:0)

我的方法是创建一个DAO(数据访问对象),它负责获取解析XML并将所有数据正确存储在SQLite上的对象。 DAO还负责从SQLite数据中重新创建对象。

请记住,这种翻译并不像你提到的那么容易。你说“每次都创建表,然后将项目放入行,prop列”。这不是标准的数据库模型,因为通常不为给定实体的每个实例创建一个表。

首先分析您拥有的实体(例如,日期,时间,项目),然后分析它们之间的关系(例如,数据包含一个或多个时间,时间包含一个或多个项目等)。通常,每个实体都将成为数据库中的一个表,并且关系将进入现有表(作为对其他表的引用),或者它们将拥有自己的表。您可以在此处详细了解此方法:http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model

答案 1 :(得分:0)

为所有人创建一个表,并为我们创建一个日期列,以便根据需要检索数据。你不需要像为所有日期创建表格那样复杂。