Posted by 최재영 on August 19, 1997 at 01:25:31:
/*
안녕하세요... 자료구조를 좀 공부하다가 막히는 부분이 있어서 이렇게 글을 올립니다.
java.util에는 Hashtable이라는 클래스로 자료구조가 제공되는데, 다음의 소스는 신상명세 클래스
(이름밖에 없지만..)의 객체들을 hashtable에 저장하고, 사용자의 입력을 받아서 그것을 포함하는
이름을 가진 객체를 찾는 겁니다.
예를 들어서 소스에서는 tiger, javaman등의 이름을 가진
객체를 저장했는데, 입력할 때, ti 또는 tig, ja, javam, j, tiger 등등 문자열의 길이에 상관없이
찾고자 하는 이름의 처음 일부를 입력하면 알아서 찾아주는 겁니다.
그런데 안 되는 군요..
주석으로 처리한 부분은 제가 디버그를 위해서 써 넣은 겁니다. 필요없는 문장이죠.
*/
import java.util.Hashtable;
class man_info {
String name;
int n;
public man_info(String s) {
name = s;
n = s.length();
// System.out.println("C = "+n);
}
public int hashCode() {
return (int)name.charAt(0);
}
public boolean equals(Object compare) {
man_info temp = (man_info)compare;
for(int i = 0; i < n-1; i++) {
if(this.name.charAt(i) != temp.name.charAt(i)) {
// System.out.println("ok");
return false;
}
}
return true;
}
}
class hash {
public static void main(String args[]) throws java.io.IOException {
Hashtable hashtable = new Hashtable();
man_info man[] = new man_info[5];
char search;
man[0] = new man_info("tiger"); // 얘네들의 length는 순수한 글자들의
man[1] = new man_info("elephant"); // 길이만 리턴됩니다. tiger = 5 ...
man[2] = new man_info("javaman");
man[3] = new man_info("mazinga");
man[4] = new man_info("jaeyoung");
for(int i = 0; i < 5; i++)
hashtable.put(man[i], man[i]);
System.out.println("Input characters for the name : ");
StringBuffer stringtemp = new StringBuffer();
// System.out.println(stringtemp.length());
while((search = (char)System.in.read()) != '\n') {
stringtemp.append(search);
// System.out.println(stringtemp.length()); // 그런데 여기서의 길이는
} // 1이 더 많이 나오죠. tig = 4....
String s = new String(stringtemp.toString()); // 물론 String으로 바꿔도 마찬가지..
man_info searched = new man_info(s);
// System.out.println("l = " + s.length());
man_info result = (man_info)hashtable.get(searched);
if(result == null)
System.out.println("Nothing..."); // 항상 result가 널이라는 군요....거참..
else
System.out.println(result.name);
}
}
/*
제가 알고 싶은 것은 원래는 왜 hashtable에서 객체를 찾지 못하고 result가 널로만 나오느냐였는데,
막 이것저것 만져보다 보니 위에 소스 옆에 주석 달아놓은 것 처럼 그 문제도 참 이상하네요...
왜 길이가 차이가 날까..
*/