我有一个字节数组(原始类型),它们可能具有随机值。我试图以最高效/最快的方式计算数组中它们的出现次数。目前我正在使用:
HashMap<Byte, Integer> dataCount = new HashMap<>();
for (byte b : data) dataCount.put(b, dataCount.getOrDefault(b, 0) + 1);
这个一行代码处理长度为24883200字节的byte[]需要大约500毫秒。 使用常规的for循环至少需要600毫秒。
我考虑构建一个Set(因为它们只包含每个元素中的一个),然后使用Collections.frequency()将其添加到HashMap中,但是从基元构造Set的方法需要几个其他调用,所以我猜它不会那么快。
完成每个项出现次数计数的最快方法是什么?
我正在使用Java 8,如果可能,我希望避免使用Apache Commons。
int [256]
比使用HashMap
更好,因为int []
比HashMap
更加紧凑,可以省下用于存储未出现值的内存。相比之下,如果有大约20个不同的字节,则int[256]
更佳。 - Louis Wasserman