java关于多个时间段重叠的问题
2019-07-10 13:40阅读:
关于多个时间段重叠的问题
在程序开发中,经常会遇到多个时间段重合的问题。如何判断多个时间段是否重合呢?网上有很多的想法和思路。我的想法是:先将多个时间段通过头部进行排序,然后再逐一进行判断。
假如:时间段都在某一天的话,我们需要判断这些时间是否重叠。
案例一:
有以下四个时间段:
01:30-02:40
03:10-05:20
02:45-03:00
05:15-06:00
首先录入这四段时间,假设每一个时间段都是String类型的,可以用把时间写进一个String数组中。
String[] time_quantums
= new String[]
{
'01:30-02:40',
'03:10-05:20',
'02:45-03:00',
'05:15-06:00' };
然而,如何对这个数组进行排列呢?有没有哪一个集合可以是有序的呢?把它存到集合中不就好了!
可以考虑一下TreeSet,它似乎可以给值进行排序。
把String数组中的数据赋值给TreeSet有以下几种方法:
方法一:直接进行赋值
//方法一:直接赋值
TreeSet<</span>String>
ts = new
TreeSet<</span>String>();
for (int i
= 0; i
<</span>
time_quantums.length;
i++) {
ts.add(time_quantums[i]);
}
方法二:利用Arrays.aList()方法
//方法二:利用Arrays.aList()方法
TreeSet<</span>String>
ts = new
TreeSet<</span>String>(Arrays.asList(time_quantums));
方法三:利用Collections.addAll()方法
//方法三:利用Collections.addAll()方法
TreeSet<</span>String>
ts = new
TreeSet<</span>String>();
Collections.addAll(ts,time_quantums);
可以发现TreeSet集合已经排序好了。
[01:30-02:40,
02:45-03:00,
03:10-05:20,
05:15-06:00]
再将TreeSet转成String数组
time_quantums=ts.toArray(new
String[ts.size()]);
现在已经完成第一步,将四个时间段进行排序,接下来是来判断时间段是否重复。
很简单,判断后一个时间段的起始位置是否小于前一个时间段不就可以了么?然而这是一个String类型的数组,其格式是“时间-时间”这种类型的。这如何比较呢?我们可以把每一个时间段分割成两个时间,用二维数组进行表示。
时间转换:
//时间转换
SimpleDateFormat
sDateFormat=new
SimpleDateFormat('HH:mm');
Date[][]dates=new
Date[time_quantums.length][2];
for (int i
= 0; i
<</span>
time_quantums.length;
i++) {
String[]strings=time_quantums[i].split('-');
try {
dates[i][0]=sDateFormat.parse(strings[0]);
dates[i][1]=sDateFormat.parse(strings[1]);
} catch (ParseException
e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
接下来只要比较时间即可。
比较前一个时间段的结束时间是否小于后一个时间段的起始时间,如果是则提示并退出比较。
boolean
flag=true;
for (int i
= 0; i
<</span>
dates.length-1;
i++) {
if
(dates[i][1].getTime()>dates[i+1][0].getTime())
{
System.out.println(time_quantums[i]+'和'+time_quantums[i+1]+'存在时间重叠');
flag=false;
break;
}
}
if (flag) {
System.out.println('这些时间段不存在时间重叠');
}
这样就能够比较是否存在时间重叠了,结果如下
03:10-05:20和05:15-06:00存在时间重叠
下面是完整的源代码:
package time_test;
import
java.text.ParseException;
import
java.text.SimpleDateFormat;
import
java.util.Arrays;
import
java.util.Collections;
import
java.util.Date;
import
java.util.TreeSet;
public class Test_1
{
public static void
main(String[] args)
{
// TODO Auto-generated method stub
String[] time_quantums
= new String[] {
'01:30-02:40', '03:10-05:20',
'02:45-03:00', '05:15-06:00'
};
System.out.println('原始数据,存放在String数组中,没有进行排序');
for (int i
= 0; i
<</span>
time_quantums.length;
i++) {
System.out.println(time_quantums[i]);
}
// //方法一:直接赋值
// TreeSet ts = new TreeSet();
// for (int i = 0; i < time_quantums.length; i++)
{
// ts.add(time_quantums[i]);
// }
//
// //方法二:利用Arrays.aList()方法