@[toc]字串中的hashcode)
h = 31 * h + val[i];
1、long類
型的hashcode精度損失
a) 為了避免long型別轉換為int有高32位的精度損失,引起hashcode值相同,所以重寫hashcode的時候,會將高32位與低32位進行異或與運算,再得到32位的乙個數字。
b) 什麼是異或與:就是真假美猴王,兩數一樣就完犢子了,為0。將高位無符號右移32位,這樣高低32位就可以運算了
c) 2、double型別的hashcode轉換,也是將double轉為long類,再運算
d) 3、為什麼常數選擇素數:
e) 減少衝突,如果我用乙個數字來乘以這個素數,那麼最終的出來的結果只能被素數本身和被乘數還有1來整除。
4、為什麼這個素數選擇31:
f) 因為不能太大,不能幹過int範圍呀最後
g) 因為計算機計算31會比較快
h) 第三,好像對於英文詞典,常數取31,碰撞次數很少
2、 為什麼布林型別選擇1231與1237兩個素數:因為不能太小,要避開其他型別資料得轉換值,也不能太大,有可能跟字串又撞上了,所以沒有道理
5、hashmap與hashtable的區別
a) 三點:執行緒安全
i. hashtable是執行緒安全的,是sychronized的
ii. 但是map可以用concurrenthashmap,它也是執行緒安全的,且是分段鎖,效率比hashtable高很多
b) hash計算值
i. hashtable設計的趨向於雜湊表分部的更均勻,容量盡量使用素數,且計算hash時直接將hashcode進行求餘取模計算。
ii. hashmap更關注與效率問題,所以他的長度為2的冪次方,這樣取模時可以直接進行位運算,比除法強多了。當然hash衝突也增加了。
c) 速度
i. hashtable效率較低
d) 結構關係;
i. hashtable(他爹dictionary都obsolete了,)
—ii. hashmap
兩個重要屬性
迭代特點
用到的快照的思路,使得在迭代的過程中,只是object陣列之前的某個快照,而不是最新的object,讀是可以併發的,讀的資料可能是老的 。
字串中的最長重複字串
求乙個字串中的最長重複字串 基本思路是利用next陣列來實現 next陣列的定義 就是 字串中第j個字元 必有next j 1個重複 字串,事實上 kmp查詢 求模式串next陣列 就是指求出模式串j個 字元前 最大的重複子串 include include include include defi...
字串 字串中數字子串的求和
題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...
在字串中刪除特定的字元(字串)。
題目 輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入 they are students.和 aeiou 則刪除之後的第乙個字串變成 thy r stdnts.其實這類題有個特點,字串中的字元分為兩類,就可以聯想快速排序裡的將當前的陣列分為左右兩組,其中左邊的數字小於某值,右邊的數...