我需要表示以下数据(用Java):
我正在考虑使用 TreeMap,但不知道如何使用。有什么想法吗?
注意事项,假设您对管理日历条目感兴趣:
模型
// 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;
Month
和 DayOfWeek
。
景色
由于我们的数据结构并不稀疏,因此独立视图必须模拟完整的日历。根据日历的规则显示所有日期/生成所有日期,但如果保存新条目,则仅在
HashMap
中添加一天。
注释
HashMap
包装在一个类中以仲裁 days
上的 CRUD操作。
month
中,或删除 year
,考虑在上面放置一个像 year => month => day
这样的三级地图。Swing 中的 JTree 也可以用作数据结构。
但是您应该问自己的第一个问题是“我想如何访问数据”。
您需要某种树结构。 这可能是您的起点:
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.
将模型数据与视图数据明确分开。
这是一个与佩斯利答案中提出的模型不同的模型。
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>
是我的建议。
我建议使用 TreeMap,但如果你想进行实验,就使用 LinkedList 吧。如果您迭代许多列表,则访问数据会非常复杂。但实验很有趣。
编辑:这是一个教程,其中包括一个包,允许您使用 TreeMap 或类似于树的东西: http://code.google.com/p/qed-java/wiki/HowToUseTree