在Java HashMap中保留一对原语

zer*_*n23 6 java primitive hashmap keyvaluepair

我有一个文件列表.我想扫描并保持相同大小的文件数量.问题是文件大小很长,正如我们所知,hashmap只接受一个对象而不是一个基元.所以使用new Long(filesize),我把它放入hashmap.由于每个Long obj都是唯一的,因此我获得了一个(filesize,1)列表,而不是获得一对(filesize,count).

我该如何构建这个累加器?

1.4.2的任何解决方案?

cle*_*tus 15

你只需这样做:

Map<Long, Integer> count = new HashMap<Long, Integer>();
for (File file : files) {
  long size = file.getTotalSpace();
  Integer n = count.get(size);
  if (n == null) {
    count.put(size, 1);
  } else {
    count.put(size, n + 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

这里有一些自动装箱和拆箱.


Chi*_*hii 6

而不是使用new Long(size),你应该使用Long.valueOf(size).这将返回相同的长引用,内部缓存,并且还应该提升性能(不,除非你做这些数以百万计的将是可见的new Long()操作).

PS.仅适用于java 1.5或更高版本