输入一个数,求有序整数Set集合内最近的数
如:Set orders = new HashSet();
orders.add(8);
orders.add(3);
orders.add(4);
orders.add(7);
orders.add(6);
orders.add(5);
输入2:得到3;
输入8:找不到返回null;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
首先,对集合进行排序;其次,执行查找过程,先看能否找到输入的值,如果找到且该元素不是最后一个元素的话,则返回其后一个元素;
最后,如果找不到这个输入值,就找第一个比其大的数并返回。
其他情况,均返回null。实现代码参考:
public class OrderTest {
public static void main(String[] args) {
Set orders = new HashSet();
orders.add(8);
orders.add(3);
orders.add(4);
orders.add(7);
orders.add(6);
orders.add(5);
System.out.println(getLatestLargerNumber(orders,2));
System.out.println(getLatestLargerNumber(orders,8));
System.out.println(getLatestLargerNumber(orders,6));
}
//查找第一个大等于number的数
public static Integer getLatestLargerNumber(Set<Integer> list,int number){
//集合为空或者只有一个元素时返回空
if(list==null||list.size()==0){
return null;
}
//先对Set集合进行排序
Object[] numbers = (Object[]) list.toArray();
Arrays.sort(numbers);
Integer value = null;
int length = numbers.length;
for(int i =0;i<length;i++){
int current = (Integer)numbers[i];
//找到number,且它不是最后一个元素,那么i+1位置处的值一定是第一个大于number的数
if(current==number){
if(i+1<length){
value = (Integer)numbers[i+1];
}
break;
}
//找不到number时,就找第一个比其大的元素
if(current>number){
value= current;
break;
}
}
return value;
}
}