Java 检查日期对象和日历对象是否在同一个月的最有效方法

Java 检查日期对象和日历对象是否在同一个月的最有效方法,java,performance,date,comparison,deprecated,Java,Performance,Date,Comparison,Deprecated,我正在进行一个项目,该项目将在日期之间运行数千次比较,以查看它们是否在同一个月,我想知道最有效的方法是什么 这与我的代码不完全一样,但要点如下: List<Date> dates = getABunchOfDates(); Calendar month = Calendar.getInstance(); for(int i = 0; i < numMonths; i++) { for(Date date : dates) { if(sameMo

我正在进行一个项目,该项目将在日期之间运行数千次比较,以查看它们是否在同一个月,我想知道最有效的方法是什么

这与我的代码不完全一样,但要点如下:

List<Date> dates = getABunchOfDates();
Calendar month = Calendar.getInstance();
for(int i = 0; i < numMonths; i++) 
{
    for(Date date : dates)
    {
        if(sameMonth(month, date)
            .. doSomething
    }
    month.add(Calendar.MONTH, -1);
}

我几乎就要使用这个方法了,因为它似乎是最快的,但是有没有更快的方法呢?和这是一个愚蠢的方法吗,因为
日期
方法已经被弃用了?注意:此项目将始终使用Java 7运行,我无法评论是否使用不推荐的方法,但是如果您选择不使用,则无需为您检查的每个
日期实例化一个新的
日历。只需在检查之前使用另一个
Calendar
并调用
setTime(date)
(或者如果并行化,则为每个线程调用一个
Calendar


作为旁注,我必须同意ChristopheD的评论,即这是一个值得数据库使用的东西。

我认为您可以定义一个静态的
日期格式
,从
日期
提取月份和年份,并将这两个对象仅用作日期

    public static DateFormat formatter= new SimpleDateForm("MMyyyy");
    public static boolean sameMonth(Date date1, Date date2)
    {
      return formatter.format(date1).equals(formatter.format(date2));
    }

“日期”是从哪里来的?如果它们在数据库中,另一种选择是确保字段具有sane(日期)类型,并简单地使用数据库引擎过滤当月的对象?你甚至可以添加索引、集群等,让这变得非常快。我从数据库中获取它们,每个日期都是地图中的一个键,代表一个月的各种数据。该数据库按月对所有内容进行分组,但其中有数千个单独的“报告”。不过,我正在考虑你的建议,即返回索引而不是数据库中的日期。这样,我一开始就不必实例化日期对象。@PaulBellora:我认为它的性能与问题中的类似,但不使用不推荐的方法。
    public static DateFormat formatter= new SimpleDateForm("MMyyyy");
    public static boolean sameMonth(Date date1, Date date2)
    {
      return formatter.format(date1).equals(formatter.format(date2));
    }