我知道你可以只使用一個整數並向上和向下計數,然後轉換爲十六進制字符串,但我需要使用大於最大值的整數(高達ffffffffffffffffffff或1208925819614629174706175 )。根據這些類型的數字,最有效的方法是什麼?由於Java向上/向下十六進制(字符串)
回答
如果你想要一個80位計數器,那麼你就可以創建存儲80位,然後add from the low part to the high part (with carry)
class Counter {
private long low; // 64 low bits of the counter
private short high; // 16 high bits
public void inc() {
low++;
if (low == 0) // wrapped around, which means there's a carry
high++; // add the carry to the high part
}
public String toHex() {
return String.format("%04X%016X", high & 0xffff, low);
}
}
的結構。如果你不想前導0然後更改toHex
功能這樣
if (low == 0)
return Long.toHexString(low);
else
return Integer.toHexString(high & 0xffff) + String.format("%016X", low);
但是,你can't count up to that maximum value in your whole life,因爲要計算只有64位值,你必須花費約9223372036秒或292年,假設你的CPU可以在一秒鐘內計算20億個值,而忽略循環和所有其他需要的東西d一個由操作系統。再增加16個位,你需要超過1900萬年來計算所有數據。
非常糟糕的命名約定。 [Java命名約定](https://stackoverflow.com/documentation/java/2697/oracle-official-code-standard/9031/naming-conventions#t=201706181648276636093)適用於以大寫字母開頭的類名,字段名稱以小寫字母開頭。你做的恰恰相反。 – Andreas
@Andreas我不熟悉Java和Java命名約定。剛修好了 –
'toHex()'不正確。在首次調用inc()之前調用'toHex()'將返回'00',而不是'0'。在第一次結轉之前調用'toHex()'將返回'0ffffffffffffffff'。調用'inc()',然後'toHex()'將返回10,這肯定是不正確的。 – Andreas
最快的方法可能會保留一個char[]
並與它計數。對於每個操作,您只需要更改90%情況下的最後一位數字。在9%的情況下,您需要更改兩位數,在0.9%的情況下等。
轉換爲String
只是一個簡單的陣列副本,因此可以附加到StringBuilder
。
請注意,這樣的優化很可能是無意義的。去一個BigInteger
,節省自己的麻煩和錯誤,並報告回來,如果它太慢。
存儲在2^64的基數中,而且您還需要只更改十進制中大約18位數字的最後一個數字。這會慢很多。無論如何,這個櫃檯是無用的,因爲它幾乎不會溢出 –
- 1. JAVA轉換十六進制字符串
- 2. 字符串爲十六進制和十六進制轉換爲字符串
- 3. 將字符串轉換爲十六進制到十六進制
- 4. 轉換十六進制字符串十六進制值
- 5. 十六進制字符串到十六進制整數
- 6. Java - 十六進制字符串表示爲整數十六進制
- 7. 將十六進制數字向下連接到文本框的字符串
- 8. Python - 以十六進制數向上
- 9. 從十六進制字符串轉換爲十六進制字符數組
- 10. 十六進制字符串到二進制字符串
- 11. Ruby:十六進制字符串到二進制字符串
- 12. 將浮點數向量轉換爲十六進制/二進制字符串
- 13. Python十六進制字符串?
- 14. 長到十六進制字符串
- 15. 解壓字符串以十六進制
- 16. 巴什 - 十六進制字符串
- 17. 字符串到十六進制
- 18. SQL十六進制字符串比較
- 19. 十六進制字符串壓縮
- 20. SHA1哈希十六進制字符串
- 21. 僅顯示十六進制字符串
- 22. 十六進制字符串爲整數
- 23. 字符串到十六進制值
- 24. 十六進制字符串SWI-Prolog的
- 25. PHP字符串爲十六進制
- 26. 十六進制字符串到NSString
- 27. 匹配十六進制字符串GAWK
- 28. 十六進制ASCII字符串轉換
- 29. 打印十六進制字符串
- 30. 十六進制值的字符串格式爲十六進制數字排序
'java.math.BigInteger'並使用'BigInteger.toString(16)轉換爲十六進制字符串;' – rossum
定義「最高效」。 – Andreas