0

我无法回答以下问题,我已将我的答案包含在下面。有人可以告诉我哪里出错了吗?谢谢!

假设一个整数需要 2 个字节的空间,而一个引用需要 4 个字节的空间。还假设最大队列大小为 200。

假设一个包含整数的队列,需要多少开销空间(以字节为单位):

The text's bounded array-based queue holding 20 elements? My Answer: 840
The text's bounded array-based queue holding 100 elements? My Answer: 1000
The text's bounded array-based queue holding 200 elements? My Answer: 1200
The text's reference-based queue holding 20 elements? My Answer: 80
The text's reference-based queue holding 100 elements? My Answer: 400
The text's reference-based queue holding 200 elements? My Answer: 800

最后,对于什么大小的队列,基于数组和基于引用的方法使用的开销空间量大致相同?我的回答:200 个元素的队列

4

2 回答 2

1

1) int 是 4 个字节,但是集合不使用原语,所以队列中的 int 将用 Integer 表示,它是一个对象,1 个 Integer 占用 16 个字节。

2)它取决于队列实现,在链接队列的情况下,每个元素将与由 2-3 个引用组成的链接相关联,每个链接将占用 30+ 字节

3)阅读http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

于 2013-03-13T02:22:17.443 回答
1

我的教授的解释:因为教科书中的队列 ADT 包含泛型类型元素,所以队列中的每个元素都存储对对象的引用(类型如 Integer、Double、String 等。它们都是引用类型(包装类)而不是比原始类型)。因此,对于元素类型为 Integer 的基于数组的 Queue,每个数组槽都持有一个 Integer 对象的引用。由于基于数组的实现有一个固定大小的底层数组,它必须在创建队列时为数组预分配内存。所需的总内存空间为(数组大小(与引用数相同))x(4 字节)+(整数对象数)x(2 字节)。

就基于引用的 Integer Queue 而言,每个元素都是一个链表节点,它有两个字段:对 Integer 对象的引用和对链表中下一个节点的引用。换句话说,每个节点都有两个引用。因此,所需的总内存空间为 (# of nodes (same as # of Integer objects)) x 2 x (4 bytes) + (# of Integer objects) x (2 bytes)。

于 2016-03-29T18:52:43.637 回答