Java 我可以使用Value';s属性作为HashMap中的键<;关键、价值>;
我有一个日历视图小部件,其中的单元格表示每天。每个单元格都有一个日期对象。 我还有一堆WorkDay对象,它们以小时为单位表示每个日期的工作班次和日程安排。WorkDay对象中有日期 我想将这些WorkDay对象传递给日历,当对日历进行膨胀时,每个单元格都应该通过其Date对象检查哪个WorkDay属于它 我不想对WorkDay对象进行分组,我想使用键 我的问题是如果我决定使用HashMap来存储工作日, 我可以使用WorkDay的内部日期对象作为每个HashMap条目的键吗 像这样Java 我可以使用Value';s属性作为HashMap中的键<;关键、价值>;,java,android,Java,Android,我有一个日历视图小部件,其中的单元格表示每天。每个单元格都有一个日期对象。 我还有一堆WorkDay对象,它们以小时为单位表示每个日期的工作班次和日程安排。WorkDay对象中有日期 我想将这些WorkDay对象传递给日历,当对日历进行膨胀时,每个单元格都应该通过其Date对象检查哪个WorkDay属于它 我不想对WorkDay对象进行分组,我想使用键 我的问题是如果我决定使用HashMap来存储工作日, 我可以使用WorkDay的内部日期对象作为每个HashMap条目的键吗 像这样 hashM
hashMap.put(workDay.getDate(), workDay);
如果这不是一个好主意,那么我应该使用什么数组/列表/集合/映射结构来存储WorkDay对象?您可以使用
日期
对象作为哈希映射
中的键,无论它是否覆盖equals()
和哈希代码()
方法
从类文档中:
更正式地说,如果这个映射包含从键k到值v的映射,使得(键==null?k==null:key.equals(k)),那么这个方法返回v;否则返回null。(最多可以有一个这样的映射。)
如果要正确检索WorkDay
对象,必须相应地重写equals()
和hashCode()
请查看这些方法的文档:
您可以使用
日期
对象作为哈希映射
中的键,无论它是否覆盖equals()
和hashCode()
方法
从类文档中:
更正式地说,如果这个映射包含从键k到值v的映射,使得(键==null?k==null:key.equals(k)),那么这个方法返回v;否则返回null。(最多可以有一个这样的映射。)
如果要正确检索WorkDay
对象,必须相应地重写equals()
和hashCode()
请查看这些方法的文档:
从技术上讲,使用
日期
作为HashMap
的键没有问题,但是从设计角度来看,您可能希望使用Long来表示时间,单位为ms
这样做,您的代码将变得Date
格式不可知(dd.MM.yy
,yyy.MM.dd G'at'hh:MM:ss z
),而不仅仅是在地图中存储一个紧凑的对象键(Long
)
然后,您还可以将该值转换回您想要的任何类型的对象,例如日历
、java日期
、joda时间等
将其存储在数据库、平面文件系统或您正在使用的任何持久性中也更容易。从技术上讲,使用
日期作为HashMap
的键是没有问题的,但从设计角度看,您可能希望使用长字符来表示毫秒的时间
这样做,您的代码将变得Date
格式不可知(dd.MM.yy
,yyy.MM.dd G'at'hh:MM:ss z
),而不仅仅是在地图中存储一个紧凑的对象键(Long
)
然后,您还可以将该值转换回您想要的任何类型的对象,例如日历
、java日期
、joda时间等
将其存储在数据库、平面文件系统或您正在使用的任何持久性中也更容易。以下是我在Petter Friberg的帮助下决定做的事情
我创建了这个类:
public class DateKey {
private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
private String dateKey;
public DateKey(Date date) {
dateKey = dateFormat.format(date);
}
public String getDateKey() {
return dateKey;
}
}
该类现在作为hashmap中的键:
Map<DateKey, WorkDay> schedule = new HashMap<DateKey, WorkDay>();
schedule.put(new DateKey(workDay.getDate()), workDay);
Map schedule=newhashmap();
schedule.put(新的日期键(workDay.getDate()),workDay);
我应该为这个类重写equals和hashCode吗?在Petter Friberg的帮助下,我决定这样做
我创建了这个类:
public class DateKey {
private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
private String dateKey;
public DateKey(Date date) {
dateKey = dateFormat.format(date);
}
public String getDateKey() {
return dateKey;
}
}
该类现在作为hashmap中的键:
Map<DateKey, WorkDay> schedule = new HashMap<DateKey, WorkDay>();
schedule.put(new DateKey(workDay.getDate()), workDay);
Map schedule=newhashmap();
schedule.put(新的日期键(workDay.getDate()),workDay);
我应该重写这个类的equals和hashCode吗?当然,我看不出有什么问题,唯一的问题是equals。。。因此,如果几秒钟后您有另一个数据对象,您将找不到workDay。。。也许简单地将日期设置为您需要的度量值(因此键入字符串)。@PetterFriberg根据问题的上下文,我认为他更担心的是哪一天。有很多方法可以实现相对性(从、之前、之后等…),只要键是唯一的(关键是它需要等于…),也许一个好方法是在工作日创建一个getKey,例如返回新的SimpleDataFormat(“yyyyMMdd”)。format(getDate())当然,我看这没什么错你唯一的问题是平等。。。因此,如果几秒钟后您有另一个数据对象,您将找不到workDay。。。也许简单地将日期设置为您需要的度量值(因此键入字符串)。@PetterFriberg根据问题的上下文,我认为他更担心的是哪一天。有很多方法可以实现相关性(从、之前、之后等…),只要键是唯一的(关键是它需要等于…),也许一个好方法是在工作日创建一个getKey,例如返回新的SimpleDataFormat(“yyyyMMdd”).format(getDate())