min heap java实现arraylist vs array

时间:2014-07-30 22:09:23

标签: java arrays arraylist heap

所以我正在为我正在考虑的算法类项目工作。我正在网上进行一些研究,发现有些人正在使用ArrayList<Integer>而有些人正在使用int array[]。我的问题是,什么是最好用于最小堆和为什么。该项目要求我从一个非常大的数字列表中保留列表中最大的10000个最大数字

2 个答案:

答案 0 :(得分:2)

如果您在编译时知道数组大小,using a bare int[] array is faster。当然,性能差异可能可以忽略不计 - 但我们的想法是ArrayList在内部实现为Object[]数组,因此您可以节省开销,加上处理{{的开销。 1}} vs Integer

答案 1 :(得分:1)

int[]消耗的内存少于ArrayList<Integer>。部分原因是从Integer添加的开销,每个实例增加~16个字节。这个video经历了32位和64位jvms中各种对象和集合的内存影响。在大约9:30标记处,它讨论了与每个对象相关的内存。在大约11:15标记处,它讨论了各种类型(包括Object引用)的内存量。 对于int[],您有1 Objectint[]),它实际上包含所有单独的int值作为连续内存。 对于ArrayList<Integer>,您拥有ArrayList对象,Object[]对象和所有Integer个对象。此外,Object[]实际上并不包含连续内存中的Integer个对象,而是包含连续内存中的对象引用。 Integer个对象本身位于堆上的其他位置。

因此,最终结果是ArrayList<Integer>需要的内存量约为int[]的6倍。支持Object[]int[]占用相同的内存量(~40,000字节)。 10k Integer个对象每个占用约20个字节,总共200,000个字节。因此,与ArrayList相比,int[]至少为240,000字节,大约为40,000字节。