由UUID和短域名想到的(续一)

由UUID和短域名想到的,帖子[url]http://www.iteye.com/topic/1017979[/url]
由UUID和短域名想到的,博客[url]http://zhaiyz.iteye.com/blog/1018906[/url]

本文继续研究22位UUID的使用。
现在用来生成22位UUID的方法使用[url=http://william-ai.iteye.com/]william_ai[/url]这位仁兄提供的。

现对产生22位UUID的效率与产生36位UUID的效率做对比。
以后还会继续对分别用它们做主键,建立索引的使用效率做对比。

代码如下:

import java.util.UUID;

public class UUIDUtil {
public static final char[] charMap;
static {
charMap = new char[64];
for (int i = 0; i < 10; i++) {
charMap[i] = (char) ('0' + i);
}
for (int i = 10; i < 36; i++) {
charMap[i] = (char) ('a' + i - 10);
}
for (int i = 36; i < 62; i++) {
charMap[i] = (char) ('A' + i - 36);
}
charMap[62] = '_';
charMap[63] = '-';
}

public static String hexTo64(String hex) {
StringBuffer r = new StringBuffer();
int index = 0;
int[] buff = new int[3];
int l = hex.length();
for (int i = 0; i < l; i++) {
index = i % 3;
buff[index] = Integer.parseInt("" + hex.charAt(i), 16);
if (index == 2) {
r.append(charMap[buff[0] << 2 | buff[1] >>> 2]);
r.append(charMap[(buff[1] & 3) << 4 | buff[2]]);
}
}
return r.toString();
}

public static String getUUID() {
StringBuffer sb = new StringBuffer("0");
String uuid = UUID.randomUUID().toString();
uuid = uuid.replaceAll("-", "").toUpperCase();
sb.append(uuid);
uuid = hexTo64(sb.toString());
return uuid;
}

public static void main(String[] args) {

int count = 100000;

// 计算循环一千万次所用时间
long start = System.nanoTime();
for (int i = 0; i < count; i++) {
}
long end = System.nanoTime();
long f = end - start;
System.out.println("循环10W次所用时间:" + Float.valueOf(f) / 1000000 + "毫秒");

@SuppressWarnings("unused")
String uuid = null;
// 计算使用getUUID()得到一千万个数据所用时间
start = System.nanoTime();
for (int i = 0; i < count; i++)
uuid = getUUID();
end = System.nanoTime();
long l1 = end - start - f;
System.out.println("计算使用getUUID()得到10W个数据所用时间:"
+ (Float.valueOf(end - start - f) / 1000000) + "毫秒");

// 计算使用randomUUID()得到一千万个数据所用时间
start = System.nanoTime();
for (int i = 0; i < count; i++)
uuid = UUID.randomUUID().toString();
end = System.nanoTime();
long l2 = end - start - f;
System.out.println("计算使用randomUUID()得到10W个数据所用时间:"
+ (Float.valueOf(end - start - f) / 1000000) + "毫秒");

System.out.println("用getUUID()取得一个数据所用的时间是用randomUUID()取得一个数据的"
+ (Float.valueOf(l1) / Float.valueOf(l2)) + "倍");
}
}

输出结果:

循环10W次所用时间:1.238204毫秒
计算使用getUUID()得到10W个数据所用时间:1324.7645毫秒
计算使用randomUUID()得到10W个数据所用时间:283.0976毫秒
用getUUID()取得一个数据所用的时间是用randomUUID()取得一个数据的4.679533倍


结论:

虽然产生22位UUID所用的时间是产生36位UUID的时间的4倍多,但产生10W个数据所用的时间为1秒多,也是可以接受的,而且本人机子的性能为中等,服务器上应该快的多,完全够用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值