我正在处理一个对象,其中该对象中每个数据块的大小随着对象大小的增长而增长。因此,它将有 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:为之前复杂的问题陈述道歉,深夜工作。