java – 如何将长数组保存为反向十六进制数字更快?

我最近开始在
android平台上开发.我正在研究一个应用程序和一些线索,我正在看他们提供的android的示例音乐应用程序.

在应用程序中,在他们保存现在播放列表的地方,他们给出了一个我无法理解的论点.参数和代码如下:

if (full) {
        StringBuilder q = new StringBuilder();

        // The current playlist is saved as a list of "reverse hexadecimal"
        // numbers, which we can generate faster than normal decimal or
        // hexadecimal numbers, which in turn allows us to save the playlist
        // more often without worrying too much about performance.
        // (saving the full state takes about 40 ms under no-load conditions
        // on the phone)
        int len = mPlayListLen;
        for (int i = 0; i < len; i++) {
            long n = mPlayList[i];
            if (n < 0) {
                continue;
            } else if (n == 0) {
                q.append("0;");
            } else {
                while (n != 0) {
                    int digit = (int)(n & 0xf);
                    n >>>= 4;
                    q.append(hexdigits[digit]);
                }
                q.append(";");
            }
        }  

哪里

mPlayList is an array of long numbers

和hexdigits是:

private final char hexdigits [] = new char [] {
        '0', '1', '2', '3',
        '4', '5', '6', '7',
        '8', '9', 'a', 'b',
        'c', 'd', 'e', 'f'
};  

然后“q”保存在共享偏好中.以类似的方式,他们稍后使用这些hexdigits检索列表.如果有人能解释这段代码的重要性,我真的很感激.我的意思是,这与直接使用long值创建字符串有什么不同.

最佳答案 他们在这里做的是一个非常简单的算法,以尽可能快地扫描数字.对于他们需要做的每个数字:

>>
&
append character looked up from array

然后对每个数字另外一次它们附加一个;在末尾.

这些操作中的每一个都非常快,因此最终结果是从存储器中取出很长时间并以紧凑的形式将其放在一个字符串中,以尽可能快的速度方式.

它是反向十六进制,因为首先显示最小的数字.

这将比Java中内置的通用算法更快,尽管如果节省很多,我会感到惊讶,除非他们节省了很多这些数字.

点赞