Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射, pre-image),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。
如果有大型數(shù)據(jù)文件(如每行為url或者ip或者單詞等的),以G為單位的,處理的時(shí)候需先切分。普通切分方法直接根據(jù)數(shù)據(jù)條數(shù)切分,得到的每個(gè)文件大小相近。
但是有時(shí)需要將相同數(shù)據(jù)放到相同文件中。可以使用hash切分法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class Test { static int HASHLEN = 1000 ; public static void main(String[] args) { // TODO Auto-generated method stub String words [] = { "yes" , "an" , "go" }; for (String word:words){ int temp = hash(word.toCharArray()); System.out.println(temp); } } public static int hash( char [] word) { int index = 0 ; int i= 0 ; while (i<word.length) { index += index * 31 + word[i]; i++; } return index % HASHLEN; } } |
總結(jié)
以上就是本文關(guān)于Java編程實(shí)現(xiàn)用hash方法切割文件的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。
原文鏈接:http://blog.csdn.net/yan456jie/article/details/42529563