선형 프로빙 충돌로 해시 테이블을 만들고 있습니다. 해시 테이블의 요소를 Set 또는 Collection에 추가하려고합니다. 내 해시 테이블을 설정 한 방식은 제네릭 형식 K의 "키"와 제네릭 형식 V의 "값"을 포함하는 노드 배열입니다. 배열의 노드가없는 테이블의 인덱스는 다음과 같습니다. null이지만 원래는 노드가 있었지만 삭제 된 인덱스는 새 노드 (-1, -1)가 포함 된 노드로 표시됩니다. 해시 테이블을 인쇄 할 때 삭제 된 부분 (키 -1이 들어있는 인덱스)을 인쇄하지 않으려합니다.K와 int 사이의 피연산자 유형이 호환되지 않습니다.
이방법은 세트 또는 컬렉션에 추가합니다 (해시 테이블 클래스)
@Override
public Set<K> keySet() {
Set<K> s = new HashSet<K>();
for(int i=0; i<this.hashtable.length; i++) {
if(this.hashtable[i] != null && this.hashtable[i].key != -1)
s.add(this.hashtable[i].key);
}
return s;
}
@Override
public Collection<V> values() {
LinkedList<V> l = new LinkedList<V>();
for(int i=0; i<this.hashtable.length; i++) {
if(this.hashtable[i] != null && this.hashtable[i].key != -1)
l.add(this.hashtable[i].val);
}
return l;
}
노드 클래스 (해시 테이블에 NOT 클래스) : 실제 내
private final class Node<K extends Comparable<? super K>, V> {
public K key;
public V val;
public Node() {
this.key = null;
this.val = null;
}
public Node(K theKey, V theValue) {
this.key = theKey;
this.val = theValue;
}
}
홈페이지 방법 다음은 관련 코드입니다 해시 테이블 클래스 :
public static void main(String[] args) {
MyJHUHashMap<Integer, String> m = new MyJHUHashMap<>();
m.put(1, "1!");
m.put(2, "2!");
m.put(3, "3!");
m.put(4, "4!");
m.put(5, "5!");
m.put(6, "6!");
m.put(7, "7!");
m.put(8, "8!");
m.put(9, "9!");
m.put(10, "10!");
m.put(11, "11!");
m.put(12, "12!");
m.put(13, "6!");
m.put(14, "7!");
m.put(15, "8!");
m.put(16, "9!");
m.put(17, "10!");
m.put(18, "11!");
m.put(19, "12!");
m.put(20, "10!");
m.put(21, "11!");
m.put(22, "12!");
m.put(23, "23!");
System.out.println(m.get(4));
System.out.println(m.get(12));
System.out.println(m.get(25));
System.out.println(m.containsKey(22));
System.out.println(m.containsKey(35));
m.remove(23);
m.remove(18);
//m.put(7, 7);
System.out.println(m.hashtable.length);
System.out.println(m.size());
for(int i=0; i<m.hashtable.length; i++) {
if(m.hashtable[i] != null && m.hashtable[i].key != -1)
System.out.print(m.hashtable[i].key + " ");
}
}
길이가 정확하고 크기가 정확하며 키 그러나 인쇄 할 때는 -1 값이 포함됩니다. 이를 극복하기 위해이 메소드에 "this.hashtable [i] .key! = -1"을 썼다. 그러나 keySet() 및 values () 메서드에서는 "Incompatible operand types K and int"오류가 발생하지만 main 메서드에서는 오류가 발생합니다. 아무도 이것을 극복 할 수있는 방법을 지적 할 수 있습니까?
'hashtable'에 문자열이있는'Node' 객체가 있으면 어떻게 될까요? –
좋은 점은 삭제 된 노드 값을 새 노드 (-1, -1) 대신 새 노드 (null, null)로 만들도록하겠습니다. –
테이블이 삭제되었을 때'Node'를 테이블에서 제거하지 않으시겠습니까? – Radiodef