最小堆java实现arraylist vs array
所以我正在为我目前正在学习的算法课程做一个项目。我在网上做一些研究,发现有些人在使用最小堆java实现arraylist vs array,java,arrays,arraylist,heap,Java,Arrays,Arraylist,Heap,所以我正在为我目前正在学习的算法课程做一个项目。我在网上做一些研究,发现有些人在使用ArrayList,有些人在使用int-array[]。我的问题是,最小堆使用什么更好,为什么。该项目要求我从一个非常大的数字列表中保留列表中前10000个最大的数字,如果您在编译时知道数组大小的话。当然,性能差异可能可以忽略不计——但其思想是,ArrayList在内部实现为一个对象[]数组,因此您可以节省这一开销,再加上处理Integer与int的开销(如果您在编译时知道数组大小的话)。当然,性能差异可能可以忽
ArrayList
,有些人在使用int-array[]
。我的问题是,最小堆使用什么更好,为什么。该项目要求我从一个非常大的数字列表中保留列表中前10000个最大的数字,如果您在编译时知道数组大小的话。当然,性能差异可能可以忽略不计——但其思想是,ArrayList
在内部实现为一个对象[]
数组,因此您可以节省这一开销,再加上处理Integer
与int
的开销(如果您在编译时知道数组大小的话)。当然,性能差异可能可以忽略不计——但其思想是,ArrayList
在内部实现为一个对象[]
数组,因此您可以节省这一开销,再加上处理Integer
与int
的开销(如果您在编译时知道数组大小的话)。当然,性能差异可能可以忽略不计——但其思想是,ArrayList
在内部实现为一个对象[]
数组,因此您可以节省这一开销,再加上处理Integer
与int
的开销(如果您在编译时知道数组大小的话)。当然,性能上的差异可能可以忽略不计——但其思想是ArrayList
在内部实现为对象[]
数组,因此您可以节省这一开销,再加上处理Integer
vsint
一个int[]
将比阵列列表消耗更少的内存。这其中的一部分只是开销,它是由一个整数添加而来的,该整数每个实例增加约16个字节。这涉及32位和64位JVM中各种对象和集合的内存影响。大约在9点30分,它谈论与每个物体相关的记忆。大约在11点15分,它讨论了各种类型(包括Object
references)占用的内存量。
对于int[]
,您有一个对象(即int[]
),它实际上包含所有单个int
值作为连续内存。
对于ArrayList
,您有ArrayList
对象、object[]
对象和所有Integer
对象。此外,Object[]
实际上并不包含连续内存中的Integer
对象,而是包含连续内存中的对象引用。Integer
对象本身位于堆的其他位置
因此,最终的结果是ArrayList
需要大约6倍于int[]
的内存量。备份Object[]
和int[]
占用相同的内存量(~40000字节)。10kInteger
对象每个占用约20字节,总计200000字节。因此,与int[]
大约40000字节相比,ArrayList
将至少有240000字节。一个int[]
将比一个ArrayList
消耗更少的内存。这其中的一部分只是开销,它是由一个整数添加而来的,该整数每个实例增加约16个字节。这涉及32位和64位JVM中各种对象和集合的内存影响。大约在9点30分,它谈论与每个物体相关的记忆。大约在11点15分,它讨论了各种类型(包括Object
references)占用的内存量。
对于int[]
,您有一个对象(即int[]
),它实际上包含所有单个int
值作为连续内存。
对于ArrayList
,您有ArrayList
对象、object[]
对象和所有Integer
对象。此外,Object[]
实际上并不包含连续内存中的Integer
对象,而是包含连续内存中的对象引用。Integer
对象本身位于堆的其他位置
因此,最终的结果是ArrayList
需要大约6倍于int[]
的内存量。备份Object[]
和int[]
占用相同的内存量(~40000字节)。10kInteger
对象每个占用约20字节,总计200000字节。因此,与int[]
大约40000字节相比,ArrayList
将至少有240000字节。一个int[]
将比一个ArrayList
消耗更少的内存。这其中的一部分只是开销,它是由一个整数添加而来的,该整数每个实例增加约16个字节。这涉及32位和64位JVM中各种对象和集合的内存影响。大约在9点30分,它谈论与每个物体相关的记忆。大约在11点15分,它讨论了各种类型(包括Object
references)占用的内存量。
对于int[]
,您有一个对象(即int[]
),它实际上包含所有单个int
值作为连续内存。
对于ArrayList
,您有ArrayList
对象、object[]
对象和所有Integer
对象。此外,Object[]
实际上并不包含连续内存中的Integer
对象,而是包含连续内存中的对象引用。Integer
对象本身位于堆的其他位置
因此最终的结果是ArrayList
需要大约6倍于int的内存量