Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免循环终止中的方法调用_Java - Fatal编程技术网

Java 如何避免循环终止中的方法调用

Java 如何避免循环终止中的方法调用,java,Java,我有下面的方法,我试图避免从while语句调用方法,但我无法理解这段代码在做什么,请有人帮我优化这段代码 public void count(K key,AtomicReferenceArray<K> keys) { int index = key.hashCode() & (keys.length() - 1); while (!key.equals(keys.get(index)) && !keys.compareA

我有下面的方法,我试图避免从while语句调用方法,但我无法理解这段代码在做什么,请有人帮我优化这段代码

public void count(K key,AtomicReferenceArray<K> keys) {
    int index = key.hashCode() & (keys.length() - 1);

    while (!key.equals(keys.get(index)) &&
           !keys.compareAndSet(index, null, key) &&
           !key.equals(keys.get(index))) {
        if (index < keys.length() - 1) {
            index++;
        } else {
            index = 0;  //wrap
        }
    }
简短的翻译:
从索引开始,通过换行循环数组,直到:

您找到了要找的钥匙

您找到了一个空密钥,并设法将密钥插入其中


出现竞态条件,另一个线程将您的密钥插入您正在检查的位置。

您到底不了解哪一位?@jonskey在while part中设置条件条件哪一部分?它有三个方法调用;只有当第一个条件为真时,才会调用第二个条件,而只有当第二个条件为真时,才会调用第三个条件。。。
while (!key.equals(keys.get(index)) &&
           !keys.compareAndSet(index, null, key) &&
           !key.equals(keys.get(index)))