我不明白这里如何计算 findindex ,我从未见过这样的事情。请解释下面的代码。
private boolean remove(Object o, Object[] snapshot, int index) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] current = getArray();
int len = current.length;
if (snapshot != current) findIndex: {
int prefix = Math.min(index, len);
for (int i = 0; i < prefix; i++) {
if (current[i] != snapshot[i] && eq(o, current[i])) {
index = i;
break findIndex;
}
}
if (index >= len)
return false;
if (current[index] == o)
break findIndex;
index = indexOf(o, current, index, len);
if (index < 0)
return false;
}
Object[] newElements = new Object[len - 1];
System.arraycopy(current, 0, newElements, 0, index);
System.arraycopy(current, index + 1,
newElements, index,
len - index - 1);
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
答案 0 :(得分:1)
&#34; findIndex&#34;是一个标签,相应的休息时间间隔为&#34;直到&#34;那个标签。
换句话说:这是一种允许您在嵌套循环中继续/中断外部循环的机制!
这只是普通break / continue的一个更强大的版本。它很少使用,因为它可以快速增加代码的复杂性(基本上它打破了结构化编程中的单入口/单出口原则)。
从这个角度来看,它是 goto 命令的Java版本。