기본 파일 시스템을 만들려고합니다. Collections
라이브러리를 사용할 수 없습니다. 이 파일 시스템은 Files
과 Directories
의 두 가지 유형의 데이터를 저장합니다. File
및 Directory
유형은 모두 추상 유형 Entry
의 하위 클래스입니다.컬렉션 라이브러리가없는 HashTable
내 디자인은 지금까지
내 해시 함수는 Entry
의 이름을 가지고 정수로 이름의 각 문자로 변환 한 값을 요약하는 것입니다. 그것은 내가 문제가 해시 테이블을 설계하고 데 무엇
protected static int hashFunction(String entryName) {
char[] a = entryName.toCharArray();
int sum = 0;
// convert String to integer Value
for (char b : a) {
sum += (int) b;
}
int hashValue = sum % hashTableKey;
return hashValue;
}
배치되는 경우 배열의 크기에 다음 모드 값을 확인합니다. 현재 해시 함수가 값을 계산하면
hashVaue
에 상대적인 배열에
Entry
(
entryName
)의 이름을 저장합니다. 나는 실제 객체를 같은 크기의 다른 배열에 저장하여 이러한 객체를 보관합니다. 이러한 객체의 저장소는 객체의 이름을 보유하는 배열의 각각의 이름과 동일한 색인을가집니다.
* 객체가 될 수있는 파일이나 디렉토리 중 하나
| "obj1" | None | "obj3" | None | None | None | "obj2" | None |
| obj1 | None | obj3 | None | None | None | obj2 | None |
이 해시 테이블을 사용하여 파일 시스템을 구현할 수있는 좋은 방법입니다 확실하지. 내가 왜 해시 테이블을 선택했는지는 O (1) 조회로 인한 것입니다. 그러나 그것은 큰 공간 요구 사항이 있습니다. 특히 내가 구현 한 방법. 파일 시스템을 구현하는 더 좋은 방법이 있다면 알려주십시오! 나는 아이디어에 열중하고있다 !!
해시 코드를 얻으려면'entryName.hashCode()'를 호출하면 어떨까요? 그리고 이것은 단지 학업 수행 (표준 컬렉션을 사용할 수 없다면 나는 가정합니다) 인 경우 O (1) 조회가 실제로 요구 사항입니까? –
@JonSkeet 이것은 숙제와 같지만 인터뷰 질문을 공부하고 연습함으로써 실제로 자바를 배우고 있습니다. 'hashCode()'를 잊어 버렸습니다. 그것이 어떻게 작동하는지 잘 모르지만 나는 그것을 찾을 수있다. 내 생각 엔 정확한 위치에 배치하기 위해 size와 함께 hashCode()를 사용하여 결과를 mod로 변환하는 것일까? 인터뷰에서 잘 보였기 때문에 나는 O (1)을하고 싶었다. haha – Liondancer