여기에 무한 루프가 있습니다. 내가 여기 고려하지 않았을 수도있는 가장자리 사건을 찾는 데 도움이 필요하다.무한 루프 동안 실행
table
은 (키, 값) 쌍의 배열입니다. isRemoved()
테이블의 요소에 플래그를 지정합니다 (제거 된 경우).
index
은 'key'의 해싱 함수에서 파생되었습니다. 여기서는 해시 테이블에 요소를 추가하려고합니다. 이 제 if
if (table[index].isRemoved()) {
if (removed != -1) {
removed = index;
}
}
인덱스에서
int removed = -1;
while (table[index] != null) {
if (table[index].isRemoved()) {
if (removed != -1) {
removed = index;
}
} else {
if (key.equals(table[index].getKey())) {
dData = table[index].getValue();
table[index].setValue(value);
return dData;
} else {
index++;
index %= startingSize;
}
}
}
if (removed != -1) {
index = removed;
}
기존 값을 업데이트 할 필요가 없습니다. 내가 성취하려고 노력하는 것은 선형 충돌에 의한 충돌 해결입니다. 따라서 인덱스가 사용되면 값은 다음 인덱스를 확인해야합니다. 그 경우에도 다음 색인을 확인하고 그때까지 빈 색인을 찾습니다. 끝까지 도달하면 0으로 돌아와 시작해야합니다. 테이블 [인덱스]가 null 일 수도 있고 아닐 수도 있습니다. –
초기 질문에 "여기에 해시 테이블에 요소를 추가하려고합니다."라고 표시됩니다. 어쨌든, 왜 첫 번째 패스에서 충돌이 없다는 것을 깨달았을 때, 다시 0으로 돌아가서 처음부터 다시 시작하고 싶습니까? 테이블이 별도의 스레드에서 업데이트 될 것으로 기대하십니까? 그럼 분명히 동기화 부분은주의를 기울이지 않습니다. – KiranCK