在一系列可变大小的对象中,给定索引查找对象的大小

时间:2013-08-23 06:49:00

标签: java algorithm data-structures indexing

我正在使用一个对象,当对象增大时,该对象中每个数据块的大小会增加。因此,它将拥有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");
    }
}

计算看起来很冗长,难以阅读和理解。请建议更好的方法来实现这一目标。

P.S:对于早先的错综复杂的问题陈述道歉,深夜工作。

2 个答案:

答案 0 :(得分:0)

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

既简单又有效。

答案 1 :(得分:0)

所以你永远不需要支持超过8个元素?您可以将它们全部存储在一个正常的数组中,一个接一个地存储,然后为每个查询计算它。