`
nicegege
  • 浏览: 589716 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

生成唯一编码

 
阅读更多

经常碰到生成唯一编码的需求,每个人有不同的解决方法。今天,在浏览同事的代码的时候,发现他写的生成唯一编码的代码,不是太严谨。我在想怎么把它完善.....

源码如下

public String generateCode(Rights currentRight) {
		List<Rights> rights=rightsDaoImpl.findAll(Rights.class);
		Random random=new Random();
		boolean repeat=false;
		String rcode=String.valueOf(random.nextInt(10000));
		for (int i = 0; i < rights.size(); i++) {
			Rights right=rights.get(i);
			 if(right.getCode()==currentRight.getCode()){
				 repeat=true;
			 }
		}
		if(repeat){
			rcode=String.valueOf(random.nextInt(10000));
		}
		return rcode;		
}

 抽出5分钟小小的研究一下,这段代码有哪些毛病?

1、首先明白生成的编码在0到10000的范围,这段代码有效的前提是right不会超过10001.随机生成rcode,无法体现包含rcode对象之间的先后创建顺序。

2、很难保证一个rcode的唯一性。遍历一次发现rcode存在则重新生成。最好是从10000中移除目前rights包含的所有数字。剩下的数字中选择一个。

3、目前每次生成rcode的时候要重新遍历,会造成性能消耗。

解决的办法:

1、如果把数据库存入mysql,则字段设置为自动递增。

2、不使用mysql的自动递增,那么重新设计方法了。

 

 

分享到:
评论

相关推荐

    区块链生成唯一编码 用作于全链数据对外暴露展示信息

    区块链生成唯一编码 用作于全链数据对外暴露展示信息

    Springboot唯一编号整合,vesta全局唯一id生成器

    这种设计使得在分布式系统中,每个节点可以独立生成唯一的ID,且能按照时间顺序排序,避免了ID冲突。 1. **Vesta ID结构**: - **时间戳**(41位):用于记录当前时间,精确到毫秒,可以表示大约69年的时间范围。 ...

    JAVA版本的生成唯一编号

    /** * 获得序列号,同时更新持久化存储中的序列 * @param current 当前的日期 * @param start 初始化的序号 * @return 所获得新的序列号 */ protected abstract int getOrUpdateNumber(Date current, int start);

    用PB生成全球唯一码(GUID)源码

    string ls_guid IF cbx_1.checked THEN is_flag = '1' ELSE is_flag = '0' END IF ls_guid = f_get_guid('',is_flag) CHOOSE CASE ls_guid CASE '0'

    生成以日期开头,加4位数字,每次加1的工具类.如:201712140001

    在IT行业中,我们经常需要创建具有唯一性的标识符,以便...使用这样的工具类,我们可以方便地生成唯一的、基于日期的序列号,并能持久化存储以保持状态。这种设计对于需要跟踪时间顺序并确保唯一性的业务逻辑十分实用。

    MD5加密字符串生成密码

    在密码学中,使用MD5加密字符串生成密码的原因在于MD5可以将任意长度的字符串转化为固定长度的哈希值,这使得每个输入都有一个唯一的输出,理论上不可能找到两个不同的输入产生相同的MD5值,这一特性被称为“碰撞...

    唯一编号生成器.java

    唯一编号生成器.java

    Delphi跨平台(Win,Android,IOS)获取设备唯一标识符

    由于隐私问题,Android也可能限制直接访问IMEI,所以开发者通常会结合多种方法生成自己的设备标识。 3. Windows:在Windows系统中,可以使用GUID(Globally Unique Identifier)或者硬件序列号来标识设备。不过,...

    企业编码管理的程序源程序源码

    1. **编码生成**:根据预设规则自动生成唯一编码,避免重复,确保每个实体的标识独一无二。 2. **编码存储**:将生成的编码保存到数据库或文件系统中,便于后续查询和更新。 3. **编码查询**:提供搜索功能,允许...

    测试多种方法生成唯一性随机码Demo

    在IT行业中,生成唯一性的随机码是一项常见的任务,特别是在数据标识、订单编号、用户认证等领域。这个名为"测试多种方法生成唯一性随机码Demo"的项目显然旨在探索和比较不同的随机码生成策略,以确保生成的序列具有...

    构造哈夫曼树,并生成编码

    这样,每个叶子节点都对应了一个唯一的二进制编码,即该叶子节点的哈夫曼编码。 #### 构建哈夫曼树的步骤 1. **初始化**:创建一个空的哈夫曼树列表。 2. **插入叶子节点**:将输入的权值集合中的每一个元素作为一...

    java生成UUID通用唯一识别码.docx

    Java中的UUID(Universally Unique Identifier)是一种用于生成全局唯一标识符的标准,由开源软件基金会(OSF)在分布式计算环境中提出。UUID的主要目的是确保在分布式系统中的任何元素都有其独特的识别信息,无需...

    企业编码生成系统.zip

    我们可以使用字符串格式化来构造这些编码,或者利用Python的UUID库生成全局唯一的128位数字,以确保编码的唯一性。 接下来,数据库管理是关键。Python有许多优秀的数据库接口库,如sqlite3(Python自带)、pymysql...

    企业编码管理系统Python源码.rar

    这意味着会有多个类,如`CodeManager`用于整体编码管理,`CodeGenerator`用于生成唯一编码,以及`CodeDatabase`用于存储和检索编码数据。这些类之间会有相应的交互,例如`CodeGenerator`可能依赖于`CodeDatabase`中...

    哈夫曼编码并用socket类发送和接收

    2. **哈夫曼编码生成**:从哈夫曼树的根节点出发,遍历树的左分支记为0,右分支记为1,为每个字符生成唯一编码。编码过程通常是从叶子节点到根节点的路径表示。 3. **数据编码**:将原始数据的每个字符替换为其对应...

    Huffman编码的压缩与解压缩

    总结起来,Huffman编码是一种基于字符频率的无损数据压缩方法,其原理是构建最优二叉树并生成唯一编码。在这个项目中,这一理论被实际应用于一个带有MFC界面的压缩和解压缩工具,便于用户操作和理解。通过这样的实践...

    生成全球唯一的32位编码

    该java文件是生成全球唯一的32位编码的工具类 RandomGUIDUtil.java

    随机生成myeclipse编码

    首先,理解“随机生成编码”这个概念,它通常指的是创建一个程序,该程序能够根据一定的规则自动生成一串随机字符或数字,用于项目中的唯一标识、密码生成或者测试数据填充等场景。在MyEclipse中,我们可以使用Java...

    Huffman编码与文件压缩.

    - **编码生成**:从根节点开始,遍历Huffman树,为每个字符生成唯一编码。 - **示例代码**(伪代码): ```plaintext while node_list has more than one node: node1 = get lowest frequency node node2 = get ...

    生成企业编码的python源码

    在IT行业中,生成企业编码是数据管理中的一个重要环节,它涉及到企业的信息化建设和内部流程的规范化。企业编码通常用于唯一标识企业内部的各种实体,如员工、产品、订单等,确保信息处理的准确性和效率。本话题将...

Global site tag (gtag.js) - Google Analytics