我想創建一個基本的文件系統。我不允許使用Collections
庫。該文件系統存儲兩種類型的數據Files
和Directories
。類型File
和Directory
都是抽象類型Entry
的子類。HashTable沒有集合庫
我的設計到目前爲止
我的哈希函數是採取Entry
的名字,將每個字符的名稱爲整數,總結起來到一個值。接下來MOD與數組的大小值,以確定它被放置
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;
}
什麼我有麻煩正在設計的哈希表。目前,一旦散列函數計算值,我將Entry
(entryName
)的名稱存儲在相對於hashVaue
的數組中。我將實際對象存儲在另一個相同大小的數組中以容納這些對象。這些對象的存儲與它們在數組中的名稱具有相同的索引,並保存對象的名稱。
*的對象可以是文件或目錄
| "obj1" | None | "obj3" | None | None | None | "obj2" | None |
| obj1 | None | obj3 | None | None | None | obj2 | None |
不知道這是落實使用哈希表中的文件系統的好方法。我選擇哈希表的原因是由於O(1)查找。但是它有很大的空間需求。特別是我實施它的方式。如果有更好的方法來實現文件系統,請讓我知道!我對創意很開放!
爲什麼不直接調用'entryName.hashCode()'得到一個哈希碼,不感興趣?如果這只是一個學術練習(我認爲它是,如果你不能使用標準集合)是O(1)查找真的需要嗎? –
@JonSkeet這看起來像是功課,但我實際上是通過學習和練習面試問題來學習Java。我忘了'hashCode()'。不知道它是如何工作的,但我可以查看它。我的猜測是修改使用hashCode()大小的結果放置在正確的位置?我想做O(1),因爲它在訪談中看起來不錯haha – Liondancer