我不明白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();
    }
}



还打破了findIndex;有吗
您如何称呼这种功能?何时引入?
findIndex是变量或方法还是静态块?什么类型的

最佳答案

“ findIndex”是一个标签,相应的中断将“最多”中断该标签。

换句话说:这是一种允许您从嵌套循环中继续/中断外部循环的机制!

这只是普通break / continue的更强大版本。它很少使用,因为它会迅速增加代码的复杂性(基本上打破了结构化编程中的单入口/单出口原则)。

从这个角度来看,它是goto命令的Java版本。

10-06 12:38