一 要求随机生成一个字符串, 要求该字符串不在原来的字符串列表当中即可,再将生成的字符串添加到列表中, 生成新的字符串列表
public class Test { public static void main(String[] args) { List<String> macTypeIdList = new ArrayList<>(); macTypeIdList.add("500396"); macTypeIdList.add("500903"); macTypeIdList.add("500749"); macTypeIdList.add("500808"); macTypeIdList.add("500101"); String typeId ="000"; String supplierId = "500"; Random random = new Random(); while (true){ int serialNum = random.nextInt(900) + 100; typeId = supplierId + serialNum; if (!macTypeIdList.contains(typeId)){ System.out.println(typeId); System.out.println(macTypeIdList); break; } } } }二 要求随机一个Long类型的设备类型id, 要求该数字不在原来的List设备Id列表当中即可. 设备类型Id = 500 + 一个三位数的随机数, 新生成的设备id添加到列表当中,形成新的列表
代码:
public static void main(String[] args) { List<Long> macTypeIdList = new ArrayList<>(); macTypeIdList.add(500396L); macTypeIdList.add(500903L); macTypeIdList.add(500749L); macTypeIdList.add(500808L); macTypeIdList.add(500101L); long typeId = 0; int supplierId = 500; Random random = new Random(); while (true){ int serialNum = random.nextInt(900) + 100; typeId = Long.parseLong (String.valueOf(supplierId)+String.valueOf(serialNum)); if (!macTypeIdList.contains(typeId)){ System.out.println(typeId); break; } } macTypeIdList.add(typeId); System.out.println(macTypeIdList); }控制台输出:
延伸思考:
当设备类型Id列表是从数据库中获取的, 设备类型Id 数量一直添加, 理论上会不会进入死循环, 内存溢出.??? 个人觉得会, 设备类型Id不能重复, 并且最后由一个三位数的随机数拼接, 100-999是900个. 实际上也就规定了macTypeIdList的数量不能超过900个. 当数据库获取的数量没有超过900个时, 是没有问题的, 超出就会进入死循环. 如何优化?代码如下:
public class Test { public static void main(String[] args) { List<Long> macTypeIdList = new ArrayList<>(); macTypeIdList.add(500396L); macTypeIdList.add(500903L); macTypeIdList.add(500749L); macTypeIdList.add(500808L); macTypeIdList.add(500101L); // ... long typeId = 0; int supplierId = 500; Random random = new Random(); if(macTypeIdList.size()< 900){ while (true){ int serialNum = random.nextInt(900) + 100; typeId = Long.parseLong (String.valueOf(supplierId)+String.valueOf(serialNum)); if (!macTypeIdList.contains(typeId)){ System.out.println(typeId); macTypeIdList.add(typeId); System.out.println(macTypeIdList); break; } } }else{ System.out.println("macTypeId的数量已达上限"); } }