HashCode值
HashMap實現原理
一致性哈希
6.為什么String, Interger這樣的wrapper類適合作為鍵?
String, Interger這樣的wrapper類是final類型的,具有不可變性,而且已經重寫了equals()和hashCode()方法了。其他的wrapper類也有這個特點。不可變性是必要的,因為為了要計算hashCode(),就要防止鍵值改變,如果鍵值在放入時和獲取時返回不同的hashcode的話,那么就不能從HashMap中找到你想要的對象。
7.ConcurrentHashMap和Hashtable的區別
Hashtable和ConcurrentHashMap有什么分別呢?它們都可以用於多線程的環境,但是當Hashtable的大小增加到一定的時候,性能會急劇下降,因為迭代時需要被鎖定很長的時間。因為ConcurrentHashMap引入了分割(segmentation),不論它變得多么大,僅僅需要鎖定map的某個部分,而其它的線程不需要等到迭代完成才能訪問map。簡而言之,在迭代的過程中,ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map。
8.HashMap的遍歷
第一種:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
效率高,以后一定要使用此種方式!
第二種:
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
效率低,以后盡量少使用!
可是為什么第一種比第二種方法效率更高呢?
HashMap這兩種遍歷方法是分別對keyset及entryset來進行遍歷,但是對於keySet其實是遍歷了2次,一次是轉為iterator,一次就從hashmap中取出key所對於的value。而entryset只是遍歷了第一次,它把key和value都放到了entry中,即鍵值對,所以就快了。
1.HashMap與Hashtable的區別:
HashMap可以接受null鍵值和值,而Hashtable則不能。
Hashtable是線程安全的,通過synchronized實現線程同步。而HashMap是非線程安全的,但是速度比Hashtable快。
5.如果HashMap的大小超過了負載因子(load factor)定義的容量,怎么辦
HashMap默認的負載因子大小為0.75,也就是說,當一個map填滿了75%的空間的時候,和其它集合類(如ArrayList等)一樣,將會創建原來HashMap大小的兩倍的數組,來重新調整map的大小,並將原來的對象放入新的數組中。
下文轉自http://www.cnblogs.com/eternalwt/archive/2013/03/21/2973807.html 感謝作者
1.在軟件開發的用戶注冊功能中常出現MD5加密這個概念,這個概念有一定的誤導性。嚴格來說:MD5還有sha-1、 RIPEMD以及Haval等不能算是加密算法(雖然常用於把密碼變成“密文”),他們只是散列算法,或者叫摘要算法。加密對應解密這個概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
2.MD5還有sha-1、 RIPEMD以及Haval等不能算是加密算法,只是散列算法,或者叫摘要算法。
2.MD5還有sha-1、 RIPEMD以及Haval等不能算是加密算法,只是散列算法,或者叫摘要算法。
2.MD5還有sha-1、 RIPEMD以及Haval等不能算是加密算法,只是散列算法,或者叫摘要算法。
3.加密對應解密這個概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
3.加密對應解密這個概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
3.加密對應解密這個概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
4.MD5算法除了注冊時對用戶密碼進行MD5運算以外,還常用於驗證下載的軟件的完整性
5.MD5算法除了注冊時對用戶密碼進行MD5運算以外,還常用於驗證下載的軟件的完整性
6.MD5運算后的長度是固定的,它顯然不可能包含視頻、軟件等源數據的全部信息。對於加密算法來說,加密后的密文是包含原始數據所有信息的,只是不能被直接讀懂變的安全了。
7.MD5運算后的長度是固定的,它顯然不可能包含視頻、軟件等源數據的全部信息。對於加密算法來說,加密后的密文是包含原始數據所有信息的,只是不能被直接讀懂變的安全了。
4.要弄懂這兩類算法的區別,最本質的方式就是把這兩類算法的步驟搞懂,但這需要大量的時間。通過兩類算法的表現可以對他們的區別有個大體的了解:
1.MD5算法除了注冊時對用戶密碼進行MD5運算以外,還常用於驗證下載的軟件的完整性(linux下面md5sum命令可以支持這一典型應用),常用電驢等下載視頻和軟件的用戶應該知道這一點。
MD5運算后的長度是固定的,它顯然不可能包含視頻、軟件等源數據的全部信息。對於加密算法來說,加密后的密文是包含原始數據所有信息的,只是不能被直接讀懂變的安全了。
MD5運算后的長度是固定的,它顯然不可能包含視頻、軟件等源數據的全部信息。對於加密算法來說,加密后的密文是包含原始數據所有信息的,只是不能被直接讀懂變的安全了。
6. 2.加密算法是一種通信體系,經常用於分布式系統。它的目標是數據經過傳輸后只能被特定的有密鑰的人讀懂,包含加密算法和密鑰2個要素。而MD5等散列算法卻不包含運算后的數據只能被特定人讀懂的目標,它只讓機器讀懂。當用於加密時,它加密后的數據對所有人一視同仁,且沒有密鑰機制,沒有好的方法從加密后的數據得到原始數據,從而保證數據的安全。它並不是通信機制,它是不可逆的。另外它的驗證數據完整性的功能上面已經提到,我想,很多有心人最初正是從這一點意識到這兩類算法的區別把?
7. 2.加密算法是一種通信體系,經常用於分布式系統。它的目標是數據經過傳輸后只能被特定的有密鑰的人讀懂,包含加密算法和密鑰2個要素。而MD5等散列算法卻不包含運算后的數據只能被特定人讀懂的目標,它只讓機器讀懂。當用於加密時,它加密后的數據對所有人一視同仁,且沒有密鑰機制,沒有好的方法從加密后的數據得到原始數據,從而保證數據的安全。它並不是通信機制,它是不可逆的。另外它的驗證數據完整性的功能上面已經提到,我想,很多有心人最初正是從這一點意識到這兩類算法的區別把?
8.很多編程人員為了將“密碼”不明示,就對密碼串進行md5散列,在數據庫或文件中保存md5編碼;但是,千萬要注意,真正到了鑒別用戶身份是否合法的時候,不是通過早先記錄下來的md5編碼生成原文再與用戶當場輸入的密碼串進行比較,而是將用戶當場輸入的密碼串也實施md5變換,比較的是前后兩次生成的md5編碼串。
8.很多編程人員為了將“密碼”不明示,就對密碼串進行md5散列,在數據庫或文件中保存md5編碼;但是,千萬要注意,真正到了鑒別用戶身份是否合法的時候,不是通過早先記錄下來的md5編碼生成原文再與用戶當場輸入的密碼串進行比較,而是將用戶當場輸入的密碼串也實施md5變換,比較的是前后兩次生成的md5編碼串。
