我正在使用一个对象,当对象增大时,该对象中每个数据块的大小会增加。因此,它将拥有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:对于早先的错综复杂的问题陈述道歉,深夜工作。答案 0 :(得分:0)
创建一个大小为a
的数组,其大小为所有大小的总和。设置数组中的每个索引,使其指向所需的对象。这样做,a[index]
只会返回正确的对象。
既简单又有效。
答案 1 :(得分:0)
所以你永远不需要支持超过8个元素?您可以将它们全部存储在一个正常的数组中,一个接一个地存储,然后为每个查询计算它。