2012年12月6日 星期四

Synchronized, Map.containsKey()

資料來源:
http://www.jackforfun.com/2007/07/java-synchronized.html



Map.containsKey() 




圖片來源http://www.isstudy.com/java/1762.html

 

http://blog.sina.com.cn/s/blog_6168ee920100jqu4.html

我们常常使用 Map 对象来缓存数据, 比较常见的处理流程是:
1. 调用 Map 的 get() 方法获取数据;
2. 如果返回不为 null, 直接返回该数据;
3. 如果返回为 null, 则生成数据, 或者从其他地方获取数据, 然后存放入 Map 中, 最后返回该数据.
这里, 我们可以通过使用 Map 的containsKey() 方法来检测是否数据是否存在, 如果key存在, 则表明已经获取过一次数据, 那么直接返回该 key 在 Map 中的值. 不管是否为 null 都直接返回; 如果 key 不存在, 则去生成或者获取数据, 并放入到 Map 中, 并返回该数据.
这里使用 containsKey() 来检测可以应用于: 1. 从其他对方获取的数据可能为空, 并且不会有变化; 2. 获取数据比较耗时. 这个场景下, 使用该方法可以大大降低消耗, 特别是在同步情况下.

MessageDigest

java.security
Class MessageDigest

java.lang.Object
  extended byjava.security.MessageDigestSpi
      extended byjava.security.MessageDigest 
 
 This MessageDigest class provides applications the functionality of a
 message digest algorithm, such as MD5 or SHA. 
 
 MessageDigest md = MessageDigest.getInstance("MD5");
 byte[] hashConde;
 md.update(number.getBytes());
 hashConde = md.digest(); 
 


 byte[] digest()
          Completes the hash computation by performing final operations such as padding. 取的值須儲存為byte[] 型態
 
 
參考 http://caterpillar.onlyfun.net/Gossip/Encoding/String.html
 byte[] getBytes()
          Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array. 使用平台預設的編碼, 儲存為byte陣列
 




參考 http://www.dotblogs.com.tw/chhuang/archive/2011/01/19/20883.aspx
 void update(byte[] input)
          Updates the digest using the specified array of bytes. 計算byte[] 的演算法的值(MessageDigest)