背景:
给了我一个需求,由于某些问题原因,需要给属性和数据添加一个code字段,这是给我发的消息
这两个要求其实是同一个需求,就是在创建对象的时候塞入一个unique的code嘛,听起来很简单吧,但是实现起来其实还是有点意思的。
实现方法:
我们用第一个需求举例解决方法吧
1、利用数据库自增属性(推荐)
这种方法最为推荐,这种方式最容易控制唯一性,并且可以保证生成的是4为纯数字
实现步骤:
1.单独创建一张单表
CREATE TABLE unique_codes (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(8) NOT NULL UNIQUE
);
2.在Java中定义出这个类
定义出实体类pojo,mapper,service
这部分代码就不写了,我用的mybatisPlus,但是只要是能和数据库交互能够insert数据就行。
3.在service层写生成方法
这样根据数据库id生成的code就可以保证四位数字且保证唯一了。
@Service
public class UniqueCodeService {
@Autowired
private UniqueCodeMapper uniqueCodeMapper;
@Transactional
public String generateUniqueCode() {
UniqueCode uniqueCode = new UniqueCode();
uniqueCode = uniqueCodeMapper.save(uniqueCode);
String code = "SXBM" + String.format("%04d", uniqueCode.getId());
uniqueCode.setCode(code);
uniqueCodeMapper.save(uniqueCode);
return code;
}
}
2、使用set集合
思路:这个方法就是首先我们需要使用Java的Random类生成一个四位数的随机数,然后我们需要检查这个随机数是否已经存在于之前生成的随机数中,如果已经存在,则重新生成直到生成一个唯一的随机数。
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class UniqueRandomNumberGenerator {
private static final int MIN = 1000; // 四位数的最小值
private static final int MAX = 9999; // 四位数的最大值
private Set<Integer> generatedNumbers = new HashSet<>();
private Random random = new Random();
public int generateUniqueRandomNumber() {
while (true) {
int randomNumber = random.nextInt((MAX - MIN) + 1) + MIN; // 生成1000到9999之间的随机数
if (!generatedNumbers.contains(randomNumber)) {
generatedNumbers.add(randomNumber);
return randomNumber;
}
}
}
public static void main(String[] args) {
UniqueRandomNumberGenerator generator = new UniqueRandomNumberGenerator();
// 生成10个唯一的四位随机数
for (int i = 0; i < 10; i++) {
int uniqueRandomNumber = generator.generateUniqueRandomNumber();
System.out.println("Generated Unique Random Number: " + uniqueRandomNumber);
}
}
}
代码解释
- 常量定义:
MIN
和MAX
分别定义了四位数的最小值和最大值。
- 成员变量:
generatedNumbers
:这是一个Set
,用于存储所有已经生成的四位随机数。random
:这是一个Random
对象,用于生成随机数。
generateUniqueRandomNumber
方法:- 使用
while(true)
循环不断生成新的四位随机数,直到生成一个不在generatedNumbers
集合中的随机数。 - 使用
Set
的contains
方法来检查随机数是否已经存在。 - 如果生成的随机数是唯一的,则将其添加到
generatedNumbers
集合,并返回该随机数。
- 使用
main
方法:- 创建
UniqueRandomNumberGenerator
对象。 - 循环调用
generateUniqueRandomNumber
方法生成并打印10个唯一的四位随机数
- 创建