JAVA对端口区间生成随机相邻的几个端口号

输入参数:已占用的端口数组、生成返回的个数,端口区间大小
核心代码如下:

public static void main(String[] args) throws Exception {
    
    
		List<Integer> ids= new ArrayList<Integer>();
//		ids.add(6001);
//		ids.add(6002);
//		ids.add(6006);
		Collections.sort(ids);
		Long a = System.currentTimeMillis();
		System.out.println(findNextPort(ids,3,6000,7000));
		System.out.println(System.currentTimeMillis()-a);
 	}
	
	//计算缺失的端口
	public static List<Integer> findNextPort(List<Integer> numbers, int count,int min,int max) {
    
    
        List<Integer> newList = new ArrayList<>();
        //将现有数加入BitSet
        BitSet bitSet = new BitSet(numbers.size());
        for (Integer number : numbers) {
    
    
            bitSet.set(number);
        }
        int len= max-min; 
        double step=0;
        if(len>0&&count>0) {
    
    
        	step=Math.floor(len/count);
        }
        boolean random=false;
        //遍历查找
        for (int i = min; i <= max; i++) {
    
    
            if (!bitSet.get(i)) {
    
    //默认开始填充数组
            	if(newList.size()==0&&!random&&step>count) {
    
    
            		random=true;
            		i = new Random().nextInt(max - min + 1) + min - count- 1;
            		continue;
            	}else {
    
    
            		newList.add(i);
            	} 
            }
            if(newList.size()>=count) {
    
    
            	break;
            }
        }
        return newList;
    }

猜你喜欢

转载自blog.csdn.net/zhaohaiyuan123/article/details/127051883
今日推荐