0

我正在处理一个对象,其中该对象中每个数据块的大小随着对象大小的增长而增长。因此,它将有 16 个大小为 1MB 的块,然后是 8 个大小为 2MB 的块和 4 个 4MB。)

给定一个索引(我们设计中的一个数据块),我应该能够快速返回这个块的大小(1MB/2MB/4MB)。

这就是我现在所拥有的:

private blockType getBlockType(final int blockIndex) {
    if (blockIndex < 0) {
        throw new IllegalArgumentException("Received illegal blockIndex for the file");

    } else if (blockIndex < NUM_SMALLBLOCKS) {
        return blockType.SMALL;

    } else if (blockIndex >= NUM_SMALLBLOCKS && blockIndex < (NUM_SMALLBLOCKS + NUM_STDBLOCKS)) {
        return blockType.STANDARD;

    } else if (blockIndex >= (NUM_SMALLBLOCKS + NUM_STDBLOCKS) && blockIndex < MAX_NUM_BLOCKS) {
        return blockType.LARGE;

    } else {
        throw new IllegalArgumentException("Received illegal blockIndex");
    }
}

计算看起来冗长且难以阅读和理解。请提出更好的方法来实现这一点。

PS:为之前复杂的问题陈述道歉,深夜工作。

4

2 回答 2

0

a创建一个大小为所有大小之和的数组。设置数组中的每个索引,使其指向您想要的对象。这样做a[index]只会返回正确的对象。

它既简单又高效。

于 2013-08-23T06:54:04.400 回答
0

所以你永远不必支持超过 8 个元素?您可以将它们一个接一个地存储在一个普通数组中,然后为每个查询计算您的方式。

于 2013-08-23T08:09:02.150 回答