長度短點的uuid UUID不失精度,長度改進

2021-10-13 06:13:22 字數 1398 閱讀 5239

在使用到uuid的時候,往往頭疼於它的長度(如1bfe50d8-544e-4e8a-95b8-199ceff15268),於是乎就有了改寫uuid的各種方法

1.去除「-」的uuid

不覺得uuid很長,但是就是看著中間的「-」很難受,又佔長度,簡單直接點就是

uuid uuid = uuid.randomuuid();

uuid.tostring.replace("-", "");

額,這種方法,簡單粗暴不優雅,其實呢,還可以看看這個「-」是**來的:

public string tostring() while (most != 0);

long least = uid.getleastsignificantbits();

do while (least != 0);

return new string(buf, charpos, 22-charpos);

/**無 - uuid*/

public static string generateuuid() else if(bt1 >= 0) else else {

out[idx + 3] = digits[tmp & 0x3f];

tmp >>= 6;

out[idx + 2] = digits[tmp & 0x3f];

tmp >>= 6;

out[idx + 1] = digits[tmp & 0x3f];

tmp >>= 6;

out[idx] = digits[tmp & 0x3f];

return new string(out, 0, 22);

public static void main(string... args) {

date d5 = new date();

for(int i = 0; i < 10000000; i++) {

generateuuid22();

date d6 = new date();

system.out.print(d6.gettime() - d5.gettime());

system.out.println("\n");

date d1 = new date();

for(int i = 0; i < 10000000; i++) {

generatemost22uuid();

date d2 = new date();

system.out.print(d2.gettime() - d1.gettime());

system.out.println("\n");

這種實現方式比用replace後再用base64轉換速度要更快(接近一倍),這裡都是為了保證uuid的精度實現的,對uuid精度要求較低的也可以使用其他位數更少的uuid變體,有更好方案的小夥伴來交流~

點分治 統計長度為K的路徑條數

套用第一種點分治模板 先加後減法。計算過程略微不同,得到deep陣列後,計算和為k的路徑對數 1.剔除d i d i k的情況 2.遍歷一遍後,每種情況計算了兩次,最後需要除2 include include include include include include include defin...

鍊錶 是否帶環,環的長度以及入口點

求環的入口點 listnode meetnode listnode phead listnode fast phead listnode slow phead while fast next next null if fast next next null slow phead while fast...

設計表的時候,對變長字段長度選擇的一點思考

原文 設計表的時候,對變長字段長度選擇的一點思考 不管是在mssql還是mysql或者oracle,變長字段的長度衡量都是要經常面對的。對於乙個變長的字段,在滿足業務的情況下 其實所謂的滿足業務是乙個比較模糊的東西 到底是選擇varchar 50 還是varchar 200 亦或是varchar 5...