public static boolean IsHave(int min,int max,String out){
String[] outs = out.split(",");
List<Map<String,Integer>> list = new ArrayList<Map<String,Integer>>();
for(String item:outs){
Map<String,Integer> map = new HashMap<String, Integer>();
String[] items = item.split(":");
map.put("min", Integer.parseInt(items[0]));
map.put("max", Integer.parseInt(items[1]));
list.add(map);
}
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("min", min);
map.put("max", max);
list.add(map); //将<min,max>生成list
for(int i=0;i<list.size()-1;i++){
for(int j=0;j<list.size()-1-i;j++){
int m = list.get(j).get("min");
int n = list.get(j+1).get("min");
if(m>n){
Map<String,Integer> temp=list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
} //将list根据min排序
int num = list.indexOf(map);
if(min>list.get(num-1).get("max")&&max<list.get(num+1).get("min")){ //找到目标区间上下两个区间进行对比
return true;
}
return false;
}
本质是解决 关于某区间是否和已存在区间有冲突问题,如果简单遍历,需要将每一个 区间与目标区间进行比对,我将所有区间根据min排序,然后只要比对目标区间和 目标区间 上下 两个区间,即可得出 目标区间与所有区间均无冲突。
以下是测试代码
public void IndexoOfTest(){
String a = "301:399,201:299,101:199,601:699,1:99,401:499,";
int min = 500;
int max = 600;
System.out.println(HDUtil.IsHave(min, max, a));
}