Java UUID工具案例如何封装

wen java案例 30

本文目录导读:

Java UUID工具案例如何封装

  1. 基础封装工具类
  2. 带格式的UUID工具类
  3. 带时间戳的UUID
  4. 业务场景专用工具类
  5. 完整工具类示例
  6. 使用示例
  7. 性能优化建议

我来介绍几种Java UUID工具的封装方式:

基础封装工具类

import java.util.UUID;
public class UUIDUtil {
    /**
     * 生成标准UUID(带横线)
     */
    public static String getUUID() {
        return UUID.randomUUID().toString();
    }
    /**
     * 生成不带横线的UUID
     */
    public static String getSimpleUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }
    /**
     * 生成指定长度的唯一字符串
     */
    public static String getUUID(int length) {
        if (length <= 0) {
            throw new IllegalArgumentException("长度必须大于0");
        }
        String uuid = getSimpleUUID();
        if (length >= uuid.length()) {
            return uuid;
        }
        return uuid.substring(0, length);
    }
    /**
     * 生成批量UUID
     */
    public static List<String> getUUIDList(int count) {
        List<String> list = new ArrayList<>(count);
        for (int i = 0; i < count; i++) {
            list.add(getUUID());
        }
        return list;
    }
}

带格式的UUID工具类

import java.util.UUID;
public class FormatUUIDUtil {
    /**
     * 生成大写UUID
     */
    public static String getUpperUUID() {
        return UUID.randomUUID().toString().toUpperCase();
    }
    /**
     * 生成小写UUID
     */
    public static String getLowerUUID() {
        return UUID.randomUUID().toString().toLowerCase();
    }
    /**
     * 生成自定义格式UUID
     * format: 使用{x}占位符,x为0-4的数字
     */
    public static String getFormatUUID(String format) {
        String uuid = UUID.randomUUID().toString();
        String[] parts = uuid.split("-");
        StringBuilder sb = new StringBuilder(format);
        for (int i = 0; i < parts.length; i++) {
            String placeholder = "{" + i + "}";
            int index = sb.indexOf(placeholder);
            while (index != -1) {
                sb.replace(index, index + placeholder.length(), parts[i]);
                index = sb.indexOf(placeholder, index + parts[i].length());
            }
        }
        return sb.toString();
    }
}

带时间戳的UUID

import java.util.UUID;
public class TimestampUUIDUtil {
    /**
     * 生成带时间戳的UUID
     */
    public static String getTimestampUUID() {
        String timestamp = String.valueOf(System.currentTimeMillis());
        String uuid = UUID.randomUUID().toString().replace("-", "");
        return timestamp + uuid;
    }
    /**
     * 生成带日期格式的UUID
     */
    public static String getDateUUID() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String dateStr = sdf.format(new Date());
        String uuid = UUID.randomUUID().toString().replace("-", "");
        return dateStr + uuid.substring(uuid.length() - 12);
    }
    /**
     * 生成可排序的UUID
     */
    public static String getSortableUUID() {
        long now = System.currentTimeMillis();
        long random = (long) (Math.random() * 1000000);
        String uuid = UUID.randomUUID().toString().replace("-", "");
        return Long.toHexString(now) + Long.toHexString(random) + uuid.substring(0, 8);
    }
}

业务场景专用工具类

import java.util.UUID;
public class BusinessUUIDUtil {
    /**
     * 生成订单号
     */
    public static String getOrderNo() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String dateStr = sdf.format(new Date());
        String uuid = UUID.randomUUID().toString().replace("-", "");
        return "ORD" + dateStr + uuid.substring(0, 8);
    }
    /**
     * 生成用户ID
     */
    public static String getUserId() {
        return "U" + System.currentTimeMillis() + 
               UUID.randomUUID().toString().replace("-", "").substring(0, 8);
    }
    /**
     * 生成文件名称
     */
    public static String getFileName(String extension) {
        return UUID.randomUUID().toString().replace("-", "") + "." + extension;
    }
    /**
     * 生成短ID(8位)
     */
    public static String getShortId() {
        return UUID.randomUUID().toString().replace("-", "").substring(0, 8);
    }
}

完整工具类示例

import java.util.UUID;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
public final class UUIDHelper {
    private UUIDHelper() {
        // 私有构造函数,防止实例化
    }
    /**
     * 生成UUID
     */
    public static String generate(boolean withHyphen) {
        String uuid = UUID.randomUUID().toString();
        return withHyphen ? uuid : uuid.replace("-", "");
    }
    /**
     * 生成带前缀的UUID
     */
    public static String generateWithPrefix(String prefix) {
        return prefix + generate(false);
    }
    /**
     * 生成带格式的UUID
     */
    public static String generateWithFormat(UUIDFormat format) {
        switch (format) {
            case TIMESTAMP:
                return System.currentTimeMillis() + generate(false).substring(0, 12);
            case DATE:
                return new SimpleDateFormat("yyyyMMdd").format(new Date()) + generate(false);
            case SEQUENCE:
                return generate(false).toUpperCase();
            case RANDOM:
                return generate(true);
            default:
                return generate(false);
        }
    }
    public enum UUIDFormat {
        TIMESTAMP, DATE, SEQUENCE, RANDOM
    }
}

使用示例

public class UUIDExample {
    public static void main(String[] args) {
        // 基本使用
        String uuid1 = UUIDUtil.getUUID();
        String uuid2 = UUIDUtil.getSimpleUUID();
        String uuid3 = UUIDUtil.getUUID(16);
        System.out.println("标准UUID: " + uuid1);
        System.out.println("简单UUID: " + uuid2);
        System.out.println("指定长度: " + uuid3);
        // 业务使用
        BusinessUUIDUtil util = new BusinessUUIDUtil();
        System.out.println("订单号: " + util.getOrderNo());
        System.out.println("用户ID: " + util.getUserId());
        System.out.println("文件名: " + util.getFileName("txt"));
        // 格式使用
        String customFormat = FormatUUIDUtil.getFormatUUID("{0}-{1}-{2}-{3}-{4}");
        System.out.println("自定义格式: " + customFormat);
    }
}

性能优化建议

public class OptimizedUUIDUtil {
    private static final SecureRandom RANDOM = new SecureRandom();
    /**
     * 高效生成UUID(减少对象创建)
     */
    public static String fastUUID() {
        byte[] randomBytes = new byte[16];
        RANDOM.nextBytes(randomBytes);
        // 设置版本4
        randomBytes[6] &= 0x0f;
        randomBytes[6] |= 0x40;
        // 设置变体
        randomBytes[8] &= 0x3f;
        randomBytes[8] |= 0x80;
        StringBuilder sb = new StringBuilder(36);
        for (int i = 0; i < 16; i++) {
            if (i == 4 || i == 6 || i == 8 || i == 10) {
                sb.append('-');
            }
            sb.append(String.format("%02x", randomBytes[i]));
        }
        return sb.toString();
    }
}

这些封装方式可以根据具体业务需求选择使用,建议:

  1. 通用场景:使用基础的 UUIDUtil
  2. 业务需求:使用专业的 BusinessUUIDUtil
  3. 性能要求:使用优化的 OptimizedUUIDUtil
  4. 格式化需求:使用 FormatUUIDUtil

抱歉,评论功能暂时关闭!