專利名稱:一種關(guān)聯(lián)字段值的查找方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種關(guān)聯(lián)字段值的查找方法及系統(tǒng)。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,數(shù)據(jù)庫的相關(guān)應(yīng)用越來越廣泛。然而,當(dāng)數(shù)據(jù)庫累積的資料越來越多,數(shù)據(jù)內(nèi)部的關(guān)聯(lián)性日益復(fù)雜時(shí),如果能方便快速的在數(shù)據(jù)庫中對數(shù)據(jù)的關(guān)聯(lián)字段值進(jìn)行查找定位就可以加快對相關(guān)數(shù)據(jù)的管理操作,這是提高處理效率,節(jié)約成本的重要手段之一,也成為各企業(yè)廠商研究的重要課題。 現(xiàn)有技術(shù)中,對關(guān)聯(lián)字段值的查找方法比較常見的是通過一個(gè)鏈表List進(jìn)行查詢,該鏈表List的創(chuàng)建是首先根據(jù)數(shù)據(jù)表中的數(shù)據(jù)數(shù)目在該鏈表中創(chuàng)建相同數(shù)目的數(shù)組,然后在每一數(shù)組中對應(yīng)存儲(chǔ)各字段的字段值。在通過該鏈表查找給定字段值的關(guān)聯(lián)字段值時(shí),也即根據(jù)某一給定字段的字段值查找屬于同一數(shù)組的其他字段的字段值時(shí),必須首先根據(jù)給定字段值遍歷鏈表找到匹配的字段值,然后在該匹配字段值所在的數(shù)組中找到其它字段的字段值,即為給定字段值的關(guān)聯(lián)字段值。 例如,假設(shè)數(shù)據(jù)庫中表T_data中包含F(xiàn)ID, FNumber, FName三個(gè)字段,首先,創(chuàng)建一個(gè)鏈表List,用于存儲(chǔ)數(shù)據(jù)庫表T_data(假設(shè)有n條數(shù)據(jù))的每一條數(shù)據(jù),然后創(chuàng)建n個(gè)數(shù)組對象[]arr,用于存儲(chǔ)每一條數(shù)據(jù)的三個(gè)字段的字段值,arr[O]存放字段FID的值,arr[l]存放字段FNumber的值,arr[2]存放字段FName的值,然后將每一個(gè)數(shù)組存放到鏈
表List中 List, add(larr);
List, add(2arr);
List, add(3arr); ...... List, add(n arr);其中每一個(gè)數(shù)組對象中均包含不同的arr
、arr[l]、arr[2]的值。 如果根據(jù)某個(gè)FID的值查找字段FNumber和FName的關(guān)聯(lián)值,則需要在以上鏈表
中遍歷每一個(gè)數(shù)組對象中的FID的字段值并與給定FID的值比對,直至找到的FID的值與
給定的FID的值匹配,比如匹配的FID的值為List, add(3arr)中arr[O]的值,則該List.
add(3arr)中arr [1] 、 arr [2]的值即為與給定FID值關(guān)聯(lián)的字段FNumber和FName的值。 但是,利用該方法在每一次查找時(shí)都要遍歷鏈表List中的數(shù)據(jù)并進(jìn)行比對,效率
非常低。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種關(guān)聯(lián)字段值的查找方法及系統(tǒng),能夠提高關(guān)聯(lián)字段值的效率。 為了解決上述技術(shù)問題,本發(fā)明實(shí)施例的技術(shù)方案如下
—種關(guān)聯(lián)字段值的查找方法,包括 選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段值的字段;
確定給定字段的字段值在選擇的哈希表中的位置; 根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值。
進(jìn)一步,所述哈希表通過以下方法創(chuàng)建 創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字段; 將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述哈希表對象對應(yīng)的哈希表,所述哈希表中同一數(shù)據(jù)的字段值位置之間具有映射關(guān)系。 進(jìn)一步,若所述選擇的哈希表為一個(gè),同時(shí)包含所述給定字段和所述欲獲取的關(guān)聯(lián)字段值的字段,則所述根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值,包括 在所述哈希表中,根據(jù)所述映射關(guān)系獲得所述給定字段的字段值位置的映射位置,位于所述映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。 進(jìn)一步,若所述選擇的哈希表為兩個(gè),第一哈希表包括所述給定字段,第二哈希表包括所述欲獲取的關(guān)聯(lián)字段值的字段,則所述根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值,包括 在所述第一哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述給定字段的字段值位置的映射位置,確定位于所述映射位置的字段值,所述第二哈希表包含所述映射位置的字段值; 在所述第二哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述映射位置的二次
映射位置,位于所述二次映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。 進(jìn)一步,還包括 將所述給定字段的字段值和所述關(guān)聯(lián)字段值從所述選擇的哈希表中刪除。
—種關(guān)聯(lián)字段值的查找系統(tǒng),包括 選擇模塊,用于選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段值的字段; 位置確定模塊,用于確定給定字段的字段值在選擇的哈希表中的位置; 關(guān)聯(lián)確定模塊,用于根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所
述欲獲取的關(guān)聯(lián)字段值。 進(jìn)一步,還包括用于創(chuàng)建哈希表的創(chuàng)建模塊,所述創(chuàng)建模塊包括 對象創(chuàng)建單元,用于創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字段; 存儲(chǔ)單元,用于將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述哈希
表對象對應(yīng)的哈希表,所述哈希表中同一數(shù)據(jù)的字段值位置之間具有映射關(guān)系。 進(jìn)一步,若所述選擇模塊選擇的哈希表為一個(gè),同時(shí)包含所述給定字段和所述欲
獲取的關(guān)聯(lián)字段值的字段,則 所述關(guān)聯(lián)確定模塊,具體用于在所述哈希表中,根據(jù)所述映射關(guān)系獲得所述給定字段的字段值位置的映射位置,位于所述映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。
5
進(jìn)一步,若所述選擇模塊選擇的哈希表為兩個(gè),第一哈希表包括所述給定字段,第二哈希表包括所述欲獲取的關(guān)聯(lián)字段值的字段,則所述關(guān)聯(lián)確定模塊包括
第一確定單元,用于在所述第一哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述給定字段的字段值位置的映射位置,確定位于所述映射位置的字段值,所述第二哈希表包含所述映射位置的字段值; 第二確定單元,用于在所述第二哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述映射位置的二次映射位置,位于所述二次映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。 進(jìn)一步,還包括 刪除模塊,用于將所述給定字段的字段值和所述關(guān)聯(lián)字段值從所述選擇的哈希表中刪除。 本發(fā)明實(shí)施例通過根據(jù)給定字段和關(guān)聯(lián)字段值的字段在預(yù)先創(chuàng)建的哈希表中進(jìn)行選擇,然后根據(jù)給定字段值和存儲(chǔ)位置的哈希函數(shù)可直接確定出給定字段值的位置,進(jìn)而可以直接或間接的在選擇的哈希表中獲取關(guān)聯(lián)字段值的位置,最終確定出關(guān)聯(lián)字段值,該過程中不需要進(jìn)行所有字段值與給定字段值的比較匹配便可直接確定出給定字段值的位置,大大提高了關(guān)聯(lián)字段值的查找效率,而且執(zhí)行程序簡單,節(jié)約內(nèi)存資源。
圖i是本發(fā)明實(shí)施例一種關(guān)聯(lián)字段值的查找方法流程圖; 圖2是本發(fā)明實(shí)施例一的方法流程圖; 圖3是本發(fā)明實(shí)施例二的方法流程圖; 圖4是本發(fā)明實(shí)施例一種關(guān)聯(lián)字段值的查找系統(tǒng); 圖5是本發(fā)明實(shí)施例另一種關(guān)聯(lián)字段值的查找系統(tǒng); 圖6是本發(fā)明實(shí)施例另一種關(guān)聯(lián)字段值的查找系統(tǒng)。
具體實(shí)施例方式
為了使本領(lǐng)域技術(shù)人員能進(jìn)一步了解本發(fā)明的特征及技術(shù)內(nèi)容,請參閱以下有關(guān)
本發(fā)明的詳細(xì)說明與附圖,附圖僅提供參考與說明,并非用來限制本發(fā)明。 現(xiàn)有技術(shù)中,記錄在鏈表List中字段值的相對位置是隨機(jī)的,即和記錄的字段值
之間不存在確定的關(guān)系,在該數(shù)據(jù)結(jié)構(gòu)中查找字段值時(shí)需進(jìn)行一系列和字段值的比較步
驟。這一類查找方法建立在"比較"的基礎(chǔ)上,查找的效率與比較次數(shù)密切相關(guān),因此對于
大量字段值存在的數(shù)據(jù)表,現(xiàn)有技術(shù)的查找方法不可避免的存在效率低下的問題,而且針
對該方法程序員需要寫大量的代碼,而且創(chuàng)建了很多中間變量,耗費(fèi)內(nèi)存資源。本發(fā)明提出
了一種關(guān)聯(lián)字段值的查找方法和系統(tǒng)改變了上述比較查找的方式,有效的提高了查找的效
率,下面結(jié)合附圖和實(shí)施例,對本發(fā)明的技術(shù)方案進(jìn)行描述。 參照圖l,為本發(fā)明實(shí)施例一種關(guān)聯(lián)字段值的查找方法流程圖。 該方法可以包括 步驟101,選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段值的字段。
6
哈希表是在哈希函數(shù)的思想上建立起來的一種用于記錄數(shù)據(jù)的表,該表中,每個(gè)字段值和表中一個(gè)唯一的存儲(chǔ)位置相對應(yīng),也即字段值與其在表中的存儲(chǔ)位置之間存在一定的函數(shù)關(guān)系,該函數(shù)關(guān)系即為哈希函數(shù)。 本步驟首先在預(yù)先創(chuàng)建的三個(gè)或三個(gè)以上的哈希表中進(jìn)行選擇,選擇的依據(jù)是哈希表中包含給定字段和欲獲取的關(guān)聯(lián)字段值的字段,該選擇的哈希表可能是一個(gè),則該哈希表中同時(shí)包含給定字段和欲獲取的關(guān)聯(lián)字段值的字段;也可能是兩個(gè)或多個(gè),至少包含給定字段和欲獲取的關(guān)聯(lián)字段值的字段。 步驟102,確定給定字段的字段值在選擇的哈希表中的位置。 根據(jù)哈希表中給定字段值的哈希函數(shù)f計(jì)算獲得給定字段值K的像f (K),也即該
給定字段值在哈希表中的位置。其中,哈希函數(shù)f在創(chuàng)建哈希表時(shí)即已確定。 步驟103,根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的
關(guān)聯(lián)字段值。 根據(jù)給定字段值的位置即可直接在選擇的哈希表中確定同一數(shù)據(jù)的其它字段值的位置,進(jìn)而可確定位于該位置的字段值即為關(guān)聯(lián)字段值;也可以根據(jù)給定字段值的位置獲取中間字段值,進(jìn)而根據(jù)中間字段值確定出欲獲取的關(guān)聯(lián)字段值,該中間字段值可能為一個(gè)或多個(gè)。具體如何確定請參照后續(xù)實(shí)施例的描述。 本發(fā)明實(shí)施例通過根據(jù)給定字段和關(guān)聯(lián)字段值的字段在預(yù)先創(chuàng)建的哈希表中進(jìn)
行選擇,然后根據(jù)給定字段值和存儲(chǔ)位置的哈希函數(shù)可直接確定出給定字段值的位置,進(jìn)
而可以直接或間接的在選擇的哈希表中獲取關(guān)聯(lián)字段值的位置,最終確定出關(guān)聯(lián)字段值,
該過程中不需要進(jìn)行所有字段值與給定字段值的比較匹配便可直接確定出給定字段值的
位置,大大提高了關(guān)聯(lián)字段值的查找效率,而且執(zhí)行程序簡單,節(jié)約內(nèi)存資源。 下面通過具體的實(shí)施例對上述方法進(jìn)行說明。 參照圖2,為本發(fā)明實(shí)施例一的方法流程圖。 該方法可以包括 步驟201,創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字段。仍以數(shù)據(jù)庫中表T_data包含的三個(gè)字段FID, FNumber, FName為例,該表T_data
中一共有n條數(shù)據(jù)。 本步驟中要?jiǎng)?chuàng)建三個(gè)哈希表(HashMap)對象IDN咖,N咖ID和NumName,其中,IDNum
中包含F(xiàn)ID、 FNumber兩個(gè)字段,NumID中包含F(xiàn)Number 、 FID兩個(gè)字段,NumName中包含有
FNumber、 FName兩個(gè)字段。當(dāng)然,也可以根據(jù)需要?jiǎng)?chuàng)建其他的哈希表對象。 步驟202,將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述哈希表對象
對應(yīng)的哈希表。 將每一條數(shù)據(jù)的三個(gè)字段值分別存儲(chǔ)在哈希表對象IDN咖,NumID和NumName中,生產(chǎn)三個(gè)對應(yīng)的哈希表IDN咖,NumID和NumName。其中,每一個(gè)哈希表中一個(gè)字段的字段值與其存儲(chǔ)位置之間存在哈希函數(shù)關(guān)系,例如,哈希表IDNum中,字段FID中的各字段值與各對應(yīng)位置之間存在各自的哈希函數(shù);哈希表NumID中,字段FNumber中的各字段值與各對應(yīng)位置之間存在各自的哈希函數(shù);哈希表NumName中,字段FName中的各字段值與各對應(yīng)位置之間存在各自的哈希函數(shù)。本實(shí)施例利用三個(gè)hashm即組合成一個(gè)keyl-key2—value結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),艮卩hashm即l (keyl, key2) , hashm即2 (keyl, value) , hashm即3 (key2, value),并實(shí)現(xiàn)了 Java. util. hashm即的一些方法。我們在bos平臺(tái)中經(jīng)常需要保存id,皿mber,name三個(gè)字段,這時(shí)這種包含兩個(gè)鍵值的keyl-key2—value的數(shù)據(jù)結(jié)構(gòu)就可以滿足我們的需要。 在一個(gè)哈希表中同一數(shù)據(jù)的字段值位置之間具有一定的映射關(guān)系,例如,哈希表
IDNum中,第n條數(shù)據(jù)的FID的值和FNumber的值,兩字段值的位置之間存在一定的映射關(guān)
系,該映射關(guān)系在哈希表建立時(shí)已確定,若FID的值的位置已知,則可根據(jù)該映射關(guān)系確定
出第n條數(shù)據(jù)中FNumber的值的位置。以上步驟201 、202可預(yù)先完成,而不必在每次查找
時(shí)重新建立哈希表。 步驟203,選擇哈希表。 假設(shè)本實(shí)施例中,給定字段值為某FNumber的值,欲獲取關(guān)聯(lián)的字段FID的值。則在本步驟中,選擇哈希表NumID即可,該哈希表同時(shí)包含給定字段FNumber和欲獲取的關(guān)聯(lián)字段值的字段FID。 步驟204,確定給定字段的字段值在選擇的哈希表中的位置。 本步驟即確定FNumber的字段值在哈希表NumID中的位置。根據(jù)該字段值與其位置的函數(shù)關(guān)系f ,即可求解獲得。 步驟205,在所述哈希表中,根據(jù)同一數(shù)據(jù)的字段值位置之間的映射關(guān)系,獲得所述給定字段的字段值位置的映射位置,位于所述映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。 在本步驟中,根據(jù)給定的FNumber值的位置和建立哈希表時(shí)確定過的同一數(shù)據(jù)的FNumber值與FID值的位置映射關(guān)系,即可確定出關(guān)聯(lián)的FID的值的位置,從而可以確定該映射位置的字段值即為欲獲取的FID的值。 如果,欲獲取的還有關(guān)聯(lián)的FName的值,則可以將步驟203中選擇的哈希表替換為NumName,將步驟204 205中的FID替換為FName,然后重復(fù)步驟203 205即可。
在查找到欲獲取的關(guān)聯(lián)字段值后,即可對關(guān)聯(lián)字段值進(jìn)行操作,例如本發(fā)明還可以包括 步驟206,將所述給定字段的字段值和所述關(guān)聯(lián)字段值從所述選擇的哈希表中刪除。 即將給定的FNumber值和關(guān)聯(lián)的FID的值從哈希表NumID中刪除。 現(xiàn)有技術(shù)中,采用鏈表List如果想刪除其中的某一條數(shù)據(jù),也同樣要遍歷鏈表中
的數(shù)據(jù)找到匹配數(shù)據(jù)后進(jìn)行刪除,效率低而且浪費(fèi)內(nèi)存資源,而本實(shí)施例通過根據(jù)給定字
段和關(guān)聯(lián)字段值的字段在預(yù)先創(chuàng)建的哈希表中選擇同時(shí)包含給定字段FNumber和欲獲取
的關(guān)聯(lián)字段值的字段FID的哈希表,然后根據(jù)給定字段值和存儲(chǔ)位置的哈希函數(shù)可直接確
定出給定字段值的位置,進(jìn)而可以直接在選擇的哈希表中獲取關(guān)聯(lián)字段值的位置,最終確
定出關(guān)聯(lián)字段值,該過程中不需要進(jìn)行所有字段值與給定字段值的比較匹配便可直接確定
出給定字段值的位置,然后執(zhí)行刪除步驟,大大提高了關(guān)聯(lián)字段值的查找效率,而且執(zhí)行程
序簡單,節(jié)約內(nèi)存資源。仍以數(shù)據(jù)庫中表T_data包含的三個(gè)字段FID, FNumber, FName為例,該表T_data中 一共有n條數(shù)據(jù)。參照圖3 ,為本發(fā)明實(shí)施例二的方法流程圖。
該方法可以包括
步驟301,創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字段。 步驟302,將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述哈希表對象
對應(yīng)的哈希表。 以上兩步驟與前述實(shí)施例類似,此處不再贅述。
步驟303,選擇哈希表。 假設(shè)本實(shí)施例中,給定字段值為某FID的值,欲獲取關(guān)聯(lián)的字段FName的值。則 在本步驟中,需選擇兩個(gè)哈希表IDNum和NumName,第一哈希表IDNum中包含給定字段FID 和字段FN咖ber,第二哈希表N咖Name種包含欲獲取的關(guān)聯(lián)字段值的字段FName和字段 FNumber。其中,字段FNumber即為給定字段和欲獲取字段的中間字段。
步驟304,確定給定字段的字段值在選擇的第一哈希表中的位置。本步驟即確定 FID的字段值在哈希表IDNum中的位置。根據(jù)該字段值與其位置的函數(shù)關(guān)系f,即可求解獲 步驟305,在所述第一哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述給定字 段的字段值位置的映射位置,確定位于所述映射位置的字段值。 本步驟中,在哈希表IDNum中,根據(jù)給定的FID值的位置和建立哈希表時(shí)確定過的 同一數(shù)據(jù)的FID值與FNumber值的位置映射關(guān)系,即可確定出FNumber的值的位置,從而可 以確定該映射位置的FNumber的字段值。 步驟306,在所述第二哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述映射位
置的二次映射位置,位于所述二次映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。 本步驟中,在哈希表NumName中,根據(jù)FNumber的字段值的位置和建立哈希表時(shí)確
定過的同一數(shù)據(jù)的FNumber值與FName值的位置映射關(guān)系,即可確定出FName的值的位置,
從而可以確定二次映射位置的FName字段值即為所述欲獲取的關(guān)聯(lián)字段值。 在查找到欲獲取的關(guān)聯(lián)字段值后,即可對關(guān)聯(lián)字段值進(jìn)行操作,例如本發(fā)明還可
以包括將所述給定字段的字段值和所述關(guān)聯(lián)字段值從所述選擇的哈希表中刪除。 本實(shí)施例通過根據(jù)給定字段和關(guān)聯(lián)字段值的字段在預(yù)先創(chuàng)建的哈希表中選擇兩
個(gè)哈希表,然后根據(jù)給定字段值和存儲(chǔ)位置的哈希函數(shù)可直接確定出給定字段值的位置,
進(jìn)而可以根據(jù)中間字段值在選擇的哈希表中間接獲取關(guān)聯(lián)字段值的位置,最終確定出關(guān)聯(lián)
字段值,該過程中不需要進(jìn)行所有字段值與給定字段值的比較匹配便可直接確定出給定字
段值的位置,大大提高了關(guān)聯(lián)字段值的查找效率,而且執(zhí)行程序簡單,節(jié)約內(nèi)存資源。 以上方法可以通過以下代碼實(shí)現(xiàn)
import Java. util. Collection ; import Java. util. HashMap ; public class DouHashMap{
private HashMap皿mld = new HashMap ();
private HashMap idNum = new HashMap();
private HashMap皿mName = new HashMap 0 ;:0106] /*
:0107] *向DouHashMap添加元素
:0108] */
:0109] public void put (Object id, Object皿m, Object name)
:0110] idN咖.put (id,皿m);
:0川] numld. put (皿m, id) ,
:0112] n畫Name. put (皿m, name);
:0113] }
:0114] /*
:0115] *刪除DouHashM即中指定id的元素
:0116] */
:0117] public void remove(0bject id){
:0118] idNum. remove (id);
:0119] 皿mld. remove (id);
:0120] 皿mN咖e. remove (idNum. get (id));
:0121] }
:0122] /*
:0123] *根據(jù)id獲取其它兩項(xiàng)的值
:0124] */
:0125] public Object[]getById(Object id) {
:0126] Object皿m = idNum. get (id);
:0127] Object name =皿mName. get (idNum. get (id));
:0128] Object [] objArr = (num, name};
:0129] return obj Arr ;
:0130] }
:0131] /*
:0132] *根據(jù)皿m獲取其它兩項(xiàng)的值
:0133] */
:0134] public Object[]getByNum(Object皿m) {
:0135] Object id =皿mld. get (皿m);
:0136] Object name =皿mName. get (皿m);
:0137] Object [] objArr = {id, name};
:0138] return objArr ;
:0139] } ,/* *返回DouHashMap的元素?cái)?shù)量 */ public int size()( return idNum. size ();
10:0145] }
:0146] /*
:0147] *返回DouHashMap的所有id
:0148] */
:0149] public Collection ids()( :0150] return皿mld. values ();
:0151] }
:0152] /*
:0153] *返回DouHashMap的所有皿m
:0154] */
:0155] public Collection皿ms () { :0156] return idNum. values (); 上述實(shí)施例中只列舉了包含三個(gè)字段的數(shù)據(jù)表的情況,當(dāng)然上述實(shí)施例方法不僅 局限于三個(gè)字段,還可以應(yīng)用于包含三個(gè)以上字段的數(shù)據(jù)表,通過預(yù)先創(chuàng)建三個(gè)以上的哈 希表,查找時(shí)可以采用多個(gè)中間字段,即通過多個(gè)哈希表獲取多個(gè)中間字段值,直至獲得欲 獲取的關(guān)聯(lián)字段值。 以上是對查找關(guān)聯(lián)字段值的方法的描述,下面對應(yīng)用該方法的系統(tǒng)進(jìn)行介紹。
參照圖4,為本發(fā)明實(shí)施例一種關(guān)聯(lián)字段值的查找系統(tǒng)。
該系統(tǒng)可以包括 選擇模塊401,用于選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段 位置確定模塊402,用于確定給定字段的字段值在選擇的哈希表中的位置。
關(guān)聯(lián)確定模塊403,用于根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定 所述欲獲取的關(guān)聯(lián)字段值。 本發(fā)明實(shí)施例通過選擇模塊401根據(jù)給定字段和關(guān)聯(lián)字段值的字段在預(yù)先創(chuàng)建 的哈希表中進(jìn)行選擇,然后位置確定模塊402根據(jù)給定字段值和存儲(chǔ)位置的哈希函數(shù)可直 接確定出給定字段值的位置,進(jìn)而關(guān)聯(lián)確定模塊403可以直接或間接的在選擇的哈希表中 獲取關(guān)聯(lián)字段值的位置,最終確定出關(guān)聯(lián)字段值,該過程中不需要進(jìn)行所有字段值與給定 字段值的比較匹配便可直接確定出給定字段值的位置,大大提高了關(guān)聯(lián)字段值的查找效 率,而且執(zhí)行程序簡單,節(jié)約內(nèi)存資源。 參照圖5,為本發(fā)明實(shí)施例另一種關(guān)聯(lián)字段值的查找系統(tǒng)。
:0157] :0158] :0159]
:0160] :0161]
:0162] :0163] :0164]
值的字段。
該系統(tǒng)可以包括 創(chuàng)建模塊501,用于創(chuàng)建哈希表。該創(chuàng)建模塊501可以包括 對象創(chuàng)建單元5011,用于創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字 段。 存儲(chǔ)單元5012,用于將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述
哈希表對象對應(yīng)的哈希表,所述哈希表中同一數(shù)據(jù)的字段值位置之間具有映射關(guān)系。 選擇模塊502,用于選擇哈希表,本實(shí)施例中該選擇模塊502選擇的哈希表為一
個(gè),同時(shí)包含所述給定字段和所述欲獲取的關(guān)聯(lián)字段值的字段。 位置確定模塊503,用于確定給定字段的字段值在選擇的哈希表中的位置。 關(guān)聯(lián)確定模塊504,具體用于在所述哈希表中,根據(jù)所述映射關(guān)系獲得所述給定字
段的字段值位置的映射位置,位于所述映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。 本實(shí)施例中還可以包括刪除模塊,用于將所述給定字段的字段值和所述關(guān)聯(lián)字段
值從所述選擇的哈希表中刪除。 本實(shí)施例通過選擇模塊502根據(jù)給定字段和關(guān)聯(lián)字段值的字段在創(chuàng)建模塊501預(yù)
先創(chuàng)建的哈希表中選擇兩個(gè)哈希表,然后位置確定模塊503根據(jù)給定字段值和存儲(chǔ)位置的
哈希函數(shù)可直接確定出給定字段值的位置,進(jìn)而關(guān)聯(lián)確定模塊504可以根據(jù)中間字段值在
選擇的哈希表中間接獲取關(guān)聯(lián)字段值的位置,最終確定出關(guān)聯(lián)字段值,該過程中不需要進(jìn)
行所有字段值與給定字段值的比較匹配便可直接確定出給定字段值的位置,大大提高了關(guān)
聯(lián)字段值的查找效率,而且執(zhí)行程序簡單,節(jié)約內(nèi)存資源。 參照圖6,為本發(fā)明實(shí)施例另一種關(guān)聯(lián)字段值的查找系統(tǒng)。 該系統(tǒng)可以包括 創(chuàng)建模塊601,用于創(chuàng)建哈希表。該模塊與前述實(shí)施例類似,此處不再贅述。
選擇模塊602,用于選擇哈希表,本實(shí)施例中該選擇模塊602選擇的哈希表為兩 個(gè),第一哈希表包括所述給定字段,第二哈希表包括所述欲獲取的關(guān)聯(lián)字段值的字段。
位置確定模塊603與前述實(shí)施例類似,此處不再贅述。
本實(shí)施例中,關(guān)聯(lián)確定模塊604包括 第一確定單元6041,用于在所述第一哈希表中,根據(jù)字段值位置之間的映射關(guān)系 獲得所述給定字段的字段值位置的映射位置,確定位于所述映射位置的字段值,所述第二 哈希表包含所述映射位置的字段值; 第二確定單元6042,用于在所述第二哈希表中,根據(jù)字段值位置之間的映射關(guān)系 獲得所述映射位置的二次映射位置,位于所述二次映射位置的字段值即為所述欲獲取的關(guān) 聯(lián)字段值。 本實(shí)施例中也還可以包括刪除模塊,用于將所述給定字段的字段值和所述關(guān)聯(lián)字 段值從所述選擇的哈希表中刪除。 本實(shí)施例通過選擇模塊602根據(jù)給定字段和關(guān)聯(lián)字段值的字段在創(chuàng)建模塊601預(yù) 先創(chuàng)建的哈希表中選擇兩個(gè)哈希表,然后位置確定模塊603根據(jù)給定字段值和存儲(chǔ)位置的 哈希函數(shù)可直接確定出給定字段值的位置,進(jìn)而關(guān)聯(lián)確定模塊604中的第一確定單元6041 和第二確定單元6042可以根據(jù)中間字段值在選擇的哈希表中間接獲取關(guān)聯(lián)字段值的位 置,最終確定出關(guān)聯(lián)字段值,該過程中不需要進(jìn)行所有字段值與給定字段值的比較匹配便
12可直接確定出給定字段值的位置,大大提高了關(guān)聯(lián)字段值的查找效率,而且執(zhí)行程序簡單, 節(jié)約內(nèi)存資源。 以上系統(tǒng)中各模塊的具體實(shí)現(xiàn)過程請參照前述方法實(shí)施例中的相應(yīng)描述,此處不 再贅述。 以上所述的本發(fā)明實(shí)施方式,并不構(gòu)成對本發(fā)明保護(hù)范圍的限定。任何在本發(fā)明 的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的權(quán)利要求保護(hù)范 圍之內(nèi)。
權(quán)利要求
一種關(guān)聯(lián)字段值的查找方法,其特征在于,包括選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段值的字段;確定給定字段的字段值在選擇的哈希表中的位置;根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述哈希表通過以下方法創(chuàng)建 創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字段;將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述哈希表對象對應(yīng)的哈希 表,所述哈希表中同一數(shù)據(jù)的字段值位置之間具有映射關(guān)系。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,若所述選擇的哈希表為一個(gè),同時(shí)包含所 述給定字段和所述欲獲取的關(guān)聯(lián)字段值的字段,則所述根據(jù)所述給定字段的字段值的位置 及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值,包括在所述哈希表中,根據(jù)所述映射關(guān)系獲得所述給定字段的字段值位置的映射位置,位 于所述映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。
4. 根據(jù)權(quán)利要求2所述的方法,其特征在于,若所述選擇的哈希表為兩個(gè),第一哈希表 包括所述給定字段,第二哈希表包括所述欲獲取的關(guān)聯(lián)字段值的字段,則所述根據(jù)所述給 定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值,包括在所述第一哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述給定字段的字段值位 置的映射位置,確定位于所述映射位置的字段值,所述第二哈希表包含所述映射位置的字 段值;在所述第二哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述映射位置的二次映射 位置,位于所述二次映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。
5. 根據(jù)權(quán)利要求1至4中任意一項(xiàng)所述的方法,其特征在于,還包括 將所述給定字段的字段值和所述關(guān)聯(lián)字段值從所述選擇的哈希表中刪除。
6. —種關(guān)聯(lián)字段值的查找系統(tǒng),其特征在于,包括選擇模塊,用于選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段值的字段;位置確定模塊,用于確定給定字段的字段值在選擇的哈希表中的位置; 關(guān)聯(lián)確定模塊,用于根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲 獲取的關(guān)聯(lián)字段值。
7. 根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,還包括用于創(chuàng)建哈希表的創(chuàng)建模塊,所述 創(chuàng)建模塊包括對象創(chuàng)建單元,用于創(chuàng)建至少三個(gè)哈希表對象,每個(gè)哈希表對象包含兩個(gè)字段; 存儲(chǔ)單元,用于將字段值存儲(chǔ)至所述哈希表對象中的對應(yīng)字段,生成與所述哈希表對 象對應(yīng)的哈希表,所述哈希表中同一數(shù)據(jù)的字段值位置之間具有映射關(guān)系。
8. 根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,若所述選擇模塊選擇的哈希表為一個(gè),同 時(shí)包含所述給定字段和所述欲獲取的關(guān)聯(lián)字段值的字段,則所述關(guān)聯(lián)確定模塊,具體用于在所述哈希表中,根據(jù)所述映射關(guān)系獲得所述給定字段 的字段值位置的映射位置,位于所述映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段值。
9. 根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,若所述選擇模塊選擇的哈希表為兩個(gè),第一哈希表包括所述給定字段,第二哈希表包括所述欲獲取的關(guān)聯(lián)字段值的字段,則所述關(guān) 聯(lián)確定模塊包括第一確定單元,用于在所述第一哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述 給定字段的字段值位置的映射位置,確定位于所述映射位置的字段值,所述第二哈希表包 含所述映射位置的字段值;第二確定單元,用于在所述第二哈希表中,根據(jù)字段值位置之間的映射關(guān)系獲得所述 映射位置的二次映射位置,位于所述二次映射位置的字段值即為所述欲獲取的關(guān)聯(lián)字段 值。
10.根據(jù)權(quán)利要求6至9中任意一項(xiàng)所述的系統(tǒng),其特征在于,還包括 刪除模塊,用于將所述給定字段的字段值和所述關(guān)聯(lián)字段值從所述選擇的哈希表中刪除。
全文摘要
本發(fā)明提供一種關(guān)聯(lián)字段值的查找方法及系統(tǒng)。一種關(guān)聯(lián)字段值的查找方法,包括選擇哈希表,所述哈希表中包含給定字段及欲獲取的關(guān)聯(lián)字段值的字段;確定給定字段的字段值在選擇的哈希表中的位置;根據(jù)所述給定字段的字段值的位置及選擇的哈希表,確定所述欲獲取的關(guān)聯(lián)字段值。本發(fā)明實(shí)施例通過根據(jù)給定字段和關(guān)聯(lián)字段值的字段在預(yù)先創(chuàng)建的哈希表中進(jìn)行選擇,然后根據(jù)給定字段值和存儲(chǔ)位置的哈希函數(shù)可直接確定出給定字段值的位置,進(jìn)而可以直接或間接的確定出關(guān)聯(lián)字段值,該過程中不需要進(jìn)行所有字段值與給定字段值的比較匹配便可直接確定出給定字段值的位置,大大提高了關(guān)聯(lián)字段值的查找效率,而且執(zhí)行程序簡單,節(jié)約內(nèi)存資源。
文檔編號G06F17/30GK101702180SQ20091025035
公開日2010年5月5日 申請日期2009年12月4日 優(yōu)先權(quán)日2009年12月4日
發(fā)明者蔡永疆 申請人:金蝶軟件(中國)有限公司