相关疑难解决方法(0)

性能问题:将十六进制char转换为Java中的数字值的最快方法?

我想从表示十六进制值(大写或小写)的字符转换为字节,如

'0'->0, '1' -> 1, 'A' -> 10, 'a' -> 10, 'f' -> 15 etc...
Run Code Online (Sandbox Code Playgroud)

我会经常调用这种方法,所以性能很重要.有没有比使用预先初始化HashMap<Character,Byte>从中获取值更快的方法?

回答

看起来这是使用switch-case和Jon Skeet的直接计算解决方案之间的一个折腾 - 尽管如此,交换机案例解决方案似乎有点微不足道.Greg的阵列方法胜出.以下是各种方法的200,000,000次运行的性能结果(以ms为单位):

Character.getNumericValue:
8360

Character.digit:
8453

HashMap<Character,Byte>:
15109

Greg's Array Method:
6656

JonSkeet's Direct Method:
7344

Switch:
7281
Run Code Online (Sandbox Code Playgroud)

多谢你们!

基准方法代码

你好,JonSkeet,你是​​老竞争对手.;-)

public class ScratchPad {

    private static final int NUMBER_OF_RUNS = 200000000;

    static byte res;

    static HashMap<Character, Byte> map = new HashMap<Character, Byte>() {{
        put( Character.valueOf( '0' ), Byte.valueOf( (byte )0 ));
        put( Character.valueOf( '1' ), Byte.valueOf( …
Run Code Online (Sandbox Code Playgroud)

java algorithm performance

9
推荐指数
3
解决办法
6300
查看次数

标签 统计

algorithm ×1

java ×1

performance ×1