java生成编号(无序和有序)

本文分享了两种在Java中生成唯一编号的方法:一种结合时间戳与UUID生成无序编号,另一种通过数据库查询生成有序编号。提供了完整的代码示例与注释,便于读者理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

供小白来使用吧 ,可以借鉴可以学习,这些我都实际测试过,可以直接使用,在使用这些 我尽量都加上注解,这样方便大家根据自己的需求改动。当然有什么不好的地方和需要改的可以联系我(第二个我看到别人来写的,如有原创可和我说,我贴地址)

1、无序生成编号(时间+编号)

public static String getDateAndUUID() {
        SimpleDateFormat tempDate = new SimpleDateFormat("yyyy");//获取时间格式 时间的完整格式为yyyyMMddHHmmss
        String cdtSequen =     tempDate.format(new java.util.Date());// 获取当前时间
        String s = UUID.randomUUID().toString().toUpperCase();//获取UUID UUID为唯一码,
        String rtnstr = cdtSequen+s.substring(0, 4);//时间+uuid拼装      截图UUID的前四位,具体根据自己需求来截取
        return rtnstr;
    }

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        System.out.println(getDateAndUUID());

    }

2 有序生成(时间+编号)

 public static String generateNumber() throws SQLException {
        String Orderno = null;

        String maxOrderno=“select top 1 xxx from xxxx  where xxx= 0  order by id desc ”//查询最新编号 有更好的方法联系我
     
        System.out.println("maxOrderno=" + maxOrderno);
        SimpleDateFormat format = new SimpleDateFormat("yyyy"); // 获取时间格式 时间的完整格式为yyyyMMddHHmmss
        String uid_pfix = format.format(new Date()); // 组合流水号前一部分,NO+时间字符串,如:NO20160126
        System.out.println("time=" + format.format(new Date()));
        if (maxOrderno != null && maxOrderno.contains(uid_pfix)) {  //
            String uid_end =

           maxOrderno.substring(4, 8); // 截取字符串最后四位,结果:0001,根据自己的位数来截,不然会报出超出范围
            System.out.println("uid_end=" + uid_end);
            int endNum = Integer.parseInt(uid_end); // 把String类型的0001转化为int类型的1
            System.out.println("endNum=" + endNum);
            int tmpNum = 10000 + endNum + 1; //编号来加
            System.out.println("tmpNum=" + tmpNum);
            Orderno = uid_pfix + subStr("" + tmpNum, 1);//最后的拼装
        } else {
            Orderno = uid_pfix + "0001";
        }
        return Orderno;
        
    }

 

### 合并两个无序数组为一个有序数组 要将两个无序数组合并为一个有序数组,可以采用多种方式来完成这一目标。以下是基于归并排序思想的一种高效实现方法。 #### 方法概述 通过归并排序中的“合并”阶段,可以直接利用两个无序数组的特性将其转化为一个有序数组。这种方法的核心在于逐步比较两个数组中的元素,并按顺序放入新的结果数组中[^2]。 #### 实现步骤说明 假设我们有如下两个无序数组 `A` `B`: ```python A = [3, 8, 11, 5] B = [2, 6, 11, 8, 9, 20, 15] ``` 为了使这两个数组变为一个有序数组,我们可以先分别对它们进行排序,然后再执行合并操作。具体代码如下所示: #### Python 实现代码 ```python def merge_sorted_arrays(A, B): # 首先对 A B 进行排序 sorted_A = sorted(A) sorted_B = sorted(B) merged_array = [] i, j = 0, 0 # 使用双指针技术遍历两个已排序数组 while i < len(sorted_A) and j < len(sorted_B): if sorted_A[i] <= sorted_B[j]: merged_array.append(sorted_A[i]) i += 1 else: merged_array.append(sorted_B[j]) j += 1 # 如果其中一个数组已经全部加入到结果中,则把另一个数组剩余的部分追加进去 while i < len(sorted_A): merged_array.append(sorted_A[i]) i += 1 while j < len(sorted_B): merged_array.append(sorted_B[j]) j += 1 return merged_array # 测试用例 A = [3, 8, 11, 5] B = [2, 6, 11, 8, 9, 20, 15] result = merge_sorted_arrays(A, B) print(result) # 输出应为 [2, 3, 5, 6, 8, 8, 9, 11, 11, 15, 20] ``` 上述代码实现了将两个无序数组转换为一个有序数组的功能。其中的关键点是对输入数组进行了预处理(即排序),随后应用了经典的双指针技巧来进行高效的合并操作[^3]。 如果不想手动编写排序逻辑,也可以直接调用内置函数或者库函数完成整个过程,例如 Java 中可借助 `Arrays.sort()` 并配合自定义比较器实现相同功能[^4]。 #### 时间复杂度分析 此算法的时间复杂度主要由以下几个部分组成: 1. 对数组 `A` 排序所需时间 \(O(n \log n)\),其中 \(n\) 是数组 `A` 的长度; 2. 对数组 `B` 排序所需时间 \(O(m \log m)\),其中 \(m\) 是数组 `B` 的长度; 3. 归并过程中线性扫描一次两个数组所需的总时间为 \(O(n + m)\)。 因此整体时间复杂度为 \(O((n+m) \log (n+m))\). ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值