使用什么数据结构?

问题描述 投票:0回答:5

我需要表示以下数据(用Java):

  • 2012年(年)
    • 01(月)
      • 01(日)
        • 你好我是一根绳子
      • 02
      • ...
    • 02
    • 03
    • 04

我正在考虑使用 TreeMap,但不知道如何使用。有什么想法吗?

java data-structures dictionary tree
5个回答
2
投票

注意事项,假设您对管理日历条目感兴趣

  • 有无限可能的日期——不要在未使用的日子上浪费内存
  • 给定一个日期,您希望快速访问当天的日期 -- 使用 数组或基于哈希的查找
  • 每一天都有一个唯一的日期 -- 地图日期 => 天

模型

// best to use ENUM for fixed set of constants
enum Month {
    JANUARY, FEBRUARY, ... , NOVEMBER, DECEMBER
}

enum Weekday {
    SUNDAY, MONDAY, ... , FRIDAY, SATURDAY
}

/**
 * The day "data node". Fill in constructors/accessors.
 */
class Day {
    int year;
    Month month;
    Weekday weekday;
    String date; // hashkey
    String entry; // the entry
}

/**
 * The calendar, simply mapping a unique date to it's day.
 * Create a date like: year + "-" + MONTH + "-" + DAY
 */
HashMap<String, Day> calendar;

在 Java 8 及更高版本中,您可以使用预定义的枚举:

Month
DayOfWeek

景色
由于我们的数据结构并不稀疏,因此独立视图必须模拟完整的日历。根据日历的规则显示所有日期/生成所有日期,但如果保存新条目,则仅在

HashMap
中添加一天。

注释

  • 在空间和时间上都非常高效。
  • 上面过于简化:将
    HashMap
    包装在一个类中以仲裁 days 上的
    CRUD
    操作。
  • 假设您不需要操纵月/年,而只需操纵天。如果这是错误的,并且您想要例如将所有日期放在
    month
    中,或删除
    year
    ,考虑在上面放置一个像
    year => month => day
    这样的三级地图。

0
投票

Swing 中的 JTree 也可以用作数据结构。

但是您应该问自己的第一个问题是“我想如何访问数据”。


0
投票

您需要某种树结构。 这可能是您的起点:

public class Node {
    private String label;
    private List<Node> children;
    //add Constructors, getters, setters, and member methods, etc
}


Node root = new Node();
root.setLabel("2012");
//children of root are "01", "02", etc.

0
投票

将模型数据与视图数据明确分开。

这是一个与佩斯利答案中提出的模型不同的模型。

Map<Calendar, String> thisIsAllYouNeedForTheModel = new HashMap<Calendar, String>();
Calendar thisIsTheKey = Calendar.getInstance();

thisIsTheKey.clear();
thisIsTheKey.set(Calendar.YEAR, theYear);
thisIsTheKey.set(Calendar.MONTH, theMonth);
thisIsTheKey.set(Calendar.DAY_OF_MONTH, theMonth);
thisIsTheKey.set(Calendar.HOUR, theHour);
thisIsTheKey.set(Calendar.MINUTE, theMinute);
thisIsTheKey.set(Calendar.SECOND, theSecond);
thisIsAllYouNeedForTheModel.put(thisIsTheKey, data);

编辑:我傻了。

Map<Calendar, String>
是我的建议。


-1
投票

我建议使用 TreeMap,但如果你想进行实验,就使用 LinkedList 吧。如果您迭代许多列表,则访问数据会非常复杂。但实验很有趣。

编辑:这是一个教程,其中包括一个包,允许您使用 TreeMap 或类似于树的东西: http://code.google.com/p/qed-java/wiki/HowToUseTree

© www.soinside.com 2019 - 2024. All rights reserved.