import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

/**

* 判断多个时间段是否出现重叠

* @author cavancao

*/

public class TimeSlotUtil {

public static boolean checkOverlap(List list){

Collections.sort(list);//排序ASC

boolean flag = false;//是否重叠标识

for(int i=0; i

if(i>0){

//跳过第一个时间段不做判断

String[] itime = list.get(i).split("-");

for(int j=0; j

//如果当前遍历的i开始时间小于j中某个时间段的结束时间那么则有重叠,反之没有重叠

//这里比较时需要排除i本身以及i之后的时间段,因为已经排序了所以只比较自己之前(不包括自己)的时间段

if(j==i || j>i){

continue;

}

String[] jtime = list.get(j).split("-");

//此处DateUtils.compare为日期比较(返回负数date1小、返回0两数相等、返回正整数date1大)

int compare = DateUtils.compare(

(DateUtils.getDate()+" "+itime[0]+":00"),

(DateUtils.getDate()+" "+jtime[1]+":00"),

"yyyy-MM-dd HH:mm:ss");

if(compare<0){

flag = true;

break;//只要存在一个重叠则可退出内循环

}

}

}

//当标识已经认为重叠了则可退出外循环

if(flag){

break;

}

}

return flag;

}

public static void main(String[] args) {

List list = new ArrayList();

list.add("08:00-09:00");

list.add("09:00-12:00");

list.add("13:00-16:30");

list.add("16:00-17:00");

list.add("18:00-20:00");

boolean flag = checkOverlap(list);

for(String time : list){

System.out.println(time);

}

System.out.println("\n当前时间段列表重叠验证结果为:" + flag);

}

}

/*

* TimeSlotUtil.java

* Version 1.0.0

* Created on 2017年12月1日

* Copyright ReYo.Cn

*/

package reyo.sdk.utils.test.dy;

import java.util.Arrays;

/**

* 判断多个时间段是否出现重叠

* @author cavancao

*/

class Interval {

int start; //起点

int end; //终点

Interval(int a, int b) {

start = a;

end = b;

}

}

class Point implements Comparable {

int value; //数值

int type; //点的类型,0为起点,1为终点

Point(int v, int t) {

value = v;

type = t;

}

//实现compareTo函数

@Override

public int compareTo(Point p) {

if (this.value == p.value) {

return 0;

} else if (this.value > p.value) {

return 1;

} else {

return -1;

}

}

//区间转换

}

public class TimeSlotUtil2 {

public int getOverlappingCount(Interval[] A) {

int max = 0, count = 1;

if (A == null || A.length == 0)

return max;

Point[] points = new Point[A.length * 2];

for (int i = 0; i < A.length; i++) {

points[2 * i] = new Point(A[i].start, 0);

points[2 * i + 1] = new Point(A[i].end, 1);

}

//Collection.sort(points);

Arrays.sort(points);

for (int i = 0; i < points.length; i++) {

if (points[i].type == 0) {

count++;

max = Math.max(max, count);

} else {

count--;

}

}

return max;

}

public static void main(String[] args) {

Interval[] testInterval = new Interval[4];

testInterval[0] = new Interval(1, 5);

testInterval[1] = new Interval(10, 15);

testInterval[2] = new Interval(5, 10);

testInterval[3] = new Interval(20, 30);

TimeSlotUtil2 demo = new TimeSlotUtil2();

int max = demo.getOverlappingCount(testInterval);

System.out.println(max);

}

}

java 时间段重叠_Java判断多个时间段是否重叠(重叠区间个数)相关推荐

  1. java 时间段重叠_java 判断两个时间段是否重叠的案例

    java 判断两个时间段是否重叠的案例 发布时间:2020-10-21 16:08:51 来源:脚本之家 阅读:108 作者:SakuyaM 最近业务上遇到需要判断两个时间段是否存在重叠的情况,网上找 ...

  2. java里怎么判断时间重合_java 判断两个时间段是否重叠的案例

    最近业务上遇到需要判断两个时间段是否存在重叠的情况,网上找了不少代码.大佬们的思路过于简洁了,有些理解不了.还只是个菜鸟码农,还是多锻炼锻炼自己的思路. 思路很简单:定义一个时间段的概念,既然是时间段 ...

  3. mysql时间段重叠_MySQL判断两个时间段是否有重合

    两个集合不交叉,只要新插入的条记录的结束时间大于已存在的记录的开始时间并且新插入记录的最小值小于已存在记录的最大值,那么这两个时间段一定存在交叉. 总结起来就一句话:最小值小于最大值并且最大值大于最小 ...

  4. java getclass 相等_Java判断2个List集合是否相等(不考虑元素的顺序)

    现在有两个对象,他们的一个属性是list,很明显两个对象的list里面的对象,都是相等的,只是这2个list里面的顺序不一致,导致这2个对象被判断为不相等啦,这就是问题,现在要解决这个问题. 问题图如 ...

  5. java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...

    我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...

  6. java 大于当前日期_java判断某日期 是否超过今天

    展开全部 一.使用Date类创建日期对象Date date1 = new Date(2017, 5, 20); 二.通过Calendar获得当前日期Date now; Calendar c = Cal ...

  7. java判断空_java判断是否空最简单的方法

    java判断是否空的方法: 1.判断字符串或者对象是否为空 StringUtils的判断 StringUtils.isEmpty(CharSequence cs); //org.apache.comm ...

  8. java 字符串包含_java判断字符串包含某个字符的实例方法

    java判断字符串是否包含某个字符的方法: 一.contains方法 1:描述 java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列 2: ...

  9. java 时间戳间隔_JAVA判断两个时间戳,相隔多少分钟

    展开全部 10位的时间戳,相减除以60,得到的就62616964757a686964616fe4b893e5b19e31333365646363是相隔多少分钟: 13位的时间戳,相减除以60000,得 ...

最新文章

  1. DeepMind让AI变身天才数学家!首次提出两大数学猜想,登Nature封面
  2. Lucene in action 笔记 analysis篇
  3. 在RAC中重建EM(转)
  4. 使用Hybris的customer conpon进行促销活动(promotion)
  5. 5图片展示_拼多多搜索【智能创意】推广5大功能升级!
  6. 推荐系统与GNN擦出的火花竟如此绚丽多彩
  7. 打造世界领先的智能运维大脑,必示科技获顺为资本领投数千万A轮融资
  8. 关闭compactos_windows 10 CompactOS最节省空间的安装系统
  9. 提高效率:10款好用的谷歌chrome浏览器插件、扩展程序
  10. 找不到启动设备按任意键重新启动计算机,[已解决]硬盘3f0 /找不到启动设备错误...
  11. 基于FPGA的数字钟 ——最终实现
  12. Centos使用yum报错---网络问题
  13. java jdk 8学习笔记,Java JDK 8学习笔记 PDF_源雷技术空间
  14. 博览安全圈:中学教材现淫秽网站孰之过
  15. intersect的用法简介
  16. Azure虚拟机挂载数据磁盘
  17. c语言编程题及答案汇总,C语言编程题及参考答案解析.doc
  18. 单位内用lk作负载均衡,大家看看
  19. ubuntu读取数据库.db
  20. 合作还是背叛(博弈论的诡计)

热门文章

  1. wustctf2020_getshell
  2. linux网络管理期末,网络管理员考试知识点7—网络管理技术
  3. 想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL)
  4. 名画30 李成《画选七幅》
  5. APP商品详情API调用展示,APP端商品详情API接口所有参数
  6. Ai绘画生成软件哪个好用?这款AI作画的二次元太精致了
  7. fgetc/fputc 和 fgets/fputs 的详细用法
  8. 网站标题被篡改成北京sai车、PK10的解决处理办法
  9. 小程序地图多点标记 marker
  10. mysql跳过安全_【Python安全攻防过渡篇:web编程和环境搭建】