해시 테이블은 키를 해시 함수에 넣어 배열의 위치를 계산합니다. 이 위치로 바로 접근하므로 평균적인 조회와 삽입이 빠릅니다.
서로 다른 키가 같은 위치에 떨어지는 충돌은 피할 수 없습니다. 데모처럼 버킷에 여러 항목을 연결하거나 다른 빈 칸을 찾아 충돌을 처리합니다.
언제 쓰나
키로 값을 빠르게 찾아야 하는 사전, 캐시, 인덱스에 씁니다.
키를 해시해 버킷 위치를 찾고 충돌한 키는 함께 보관합니다.
<div class="v"><header><b>HASH TABLE</b><span id="state"></span></header><main><div class="keys" id="keys"></div><div class="arrow">↓ hash(key) ↓</div><div class="buckets" id="buckets"></div></main><footer>collision in bucket 0</footer></div>.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,4.5vmin,19px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.45} .keys,.buckets{display:flex;justify-content:center;gap:4px}.keys{height:27%;align-items:center}.keys b{padding:5px 8px;border:1px solid var(--line);border-radius:6px}.arrow{text-align:center;color:var(--accent);height:25%}.buckets{height:45%;align-items:stretch}.bucket{width:22%;border:1px solid var(--line);border-radius:6px;text-align:center;padding:5px 2px;font:600 .85em ui-monospace,monospace}.bucket span{display:block;color:var(--accent)}const keys=["A","B","C","D"];let n=0;function draw(){document.getElementById("keys").innerHTML=keys.map((k,i)=>"<b class=\""+(i===n?"active":"")+"\">"+k+"</b>").join("");document.getElementById("buckets").innerHTML=[0,1,2].map(i=>"<div class=bucket>"+i+"<span>"+keys.slice(0,n+1).filter((_,j)=>j%3===i).join(" → ")+"</span></div>").join("");document.getElementById("state").textContent=keys[n]+" → "+n%3;n=(n+1)%4}draw();setInterval(draw,900)해시 테이블은 키를 해시 함수에 넣어 배열의 위치를 계산합니다. 이 위치로 바로 접근하므로 평균적인 조회와 삽입이 빠릅니다.
서로 다른 키가 같은 위치에 떨어지는 충돌은 피할 수 없습니다. 데모처럼 버킷에 여러 항목을 연결하거나 다른 빈 칸을 찾아 충돌을 처리합니다.
키로 값을 빠르게 찾아야 하는 사전, 캐시, 인덱스에 씁니다.