資料結構之簡易版hashmap

2021-09-30 12:49:56 字數 1879 閱讀 5522

在程式設計中hashmap是一種強大的資料結構,可以說是程式設計利器,下面是我自己寫的簡易版hashmap。

public class myhashmap;

transient entry table = (entry) empty_table;

// 鍵值對數量

transient int size;

// 載入因子

int threshold;

float loadfactor = 0f;

// 預設初始化容量

static final int default_initial_capacity = 1 << 4;

// 載入因子

static final float default_load_factor = 0.75f;

// 最大容量

static final int maximum_capacity = 1 << 30;

public myhashmap()

// 想hashmap中放入元素

public v put(k key, v value)

// 計算key值得hashcode值

int hash = hash(key);

int i = indexfor(hash, table.length);

/*** 如果重複新增資料則覆蓋,如果hash值相同的,也同樣遍歷之後進行修改

*/for (entrye = table[i]; e != null; e = e.next)

} addentry(hash, key, value, i);

return null;

} private void addentry(int hash, k key, v value, int i)

//createentry(hash, key, value, i);

} private void createentry(int hash, k key, v value, int bucketindex)

// 擴容

private void resize(int i)

/*** 將舊桶中的資料移入新桶

* * @param newtable

* @param b

*/private void transfer(entry newtable, boolean flag)

} }private int indexfor(int h, int length)

final int hash(object k)

private void inflatetable(int tosize)

/*** 桶

*/static class entry

// 獲得key值

public final k getkey()

// 獲得value值

public final v getvalue()

public final v setvalue(v newvalue)

public final int hashcode()

public final string tostring()

}}

寫的很粗糙,甚至可能有bug,但是基本邏輯不變,hashmap的實現原理是操作內部靜態類(k,v)泛型結構的,初始容量是16,當執行插入資料時,實際是向entry型別的陣列中插入資料,一樣運用了擴容演算法,容量如果不夠的話,其基本理念是計算key的hash值,然後計算出儲存位置,最後向陣列中插入資料,如果key值計算相同,但是實際儲存值不同的話,那麼還是在相同位置處插入資料,entry型別實際是乙個單向鍊錶,總的來說hashmap=陣列+鍊錶,至於載入因子,閥值等概念讀者可以自已去了解,也無非使效能更趨於合理,下圖是視覺化的一種表示:

資料結構 順序表(初學者簡易版)

剛接觸資料結構,看書太著急,一上來就被各種自定義的變數和函式搞得一懵一懵的 目前順序表剛剛入門,花了兩天寫了乙個順序表的基礎版本 對於初學者應該是比較通俗易懂的了 歡迎各位大佬指錯督促,謝謝你們 ps 以下順序表包含操作有 建立 初始化查詢 插入刪除 include include define m...

星雲鏈Nebulas資料彙總(簡易版)

以下的資料基本都源自於星雲nebulas官網,都是有關技術方面的資料。我只是做個搬運工,方便各位喜歡區塊鏈技術的大神查閱,節約時間。後續我還會不斷更新。謝謝。星雲官方中文電報群 星雲官方英文電報群 english group t.me nebulasio 星雲推特 2 星雲鏈技術 解讀 demo 鐘...

C 之簡易版商品管理系統(非常簡易)

主函式 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 簡易版商品管理系統 catch exception...