HashTable的應用非常廣泛,HashMap是新框架中用來代替HashTable的類,也就是說建議使用HashMap,不要使用HashTable。可能你覺得HashTable很好用,為什麼不用呢?這裡簡單分析他們的區別。
1.HashTable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap這個區別就像Vector和ArrayList一樣。

2.HashTable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。

3.HashTable有一個contains(Object value),功能和containsValue(Object value)功能一樣。

4.HashTable使用Enumeration,HashMap使用Iterator。

以上只是表面的不同,它們的實現也有很大的不同。

5.HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。

6.哈希值的使用不同,HashTable直接使用對象的hashCode,代碼是這樣的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新計算hash值,而且用與代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}
以上只是一些比較突出的區別,當然他們的實現上還是有很多不同的,比如
HashMap對null的操作

天天都要努力 發表在 痞客邦 留言(0) 人氣()

HashMap 和 Hashtable 的比較是Java面試中的常見問題,用來考驗程序員是否能夠正確使用集合類以及是否可以隨機應變使用多種思路解決問題。HashMap的工作原理、ArrayList與Vector的比較以及這個問題是有關Java 集合框架的最經典的問題。Hashtable是個過時的集合類,存在於Java API中很久了。在Java 4中被重寫了,實現了Map接口,所以自此以後也成了Java集合框架中的一部分。Hashtable和HashMap在Java面試中相當容易被問到,甚至成為了集合框架面試題中最常被考的問題,所以在參加任何Java面試之前,都不要忘了準備這一題。

這篇文章中,我們不僅將會看到HashMap和Hashtable的區別,還將看到它們之間的相似之處。
HashMap和Hashtable的區別

HashMap和Hashtable都實現了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區別有:線程安全性,同步(synchronization),以及速度。

HashMap幾乎可以等價於Hashtable,除了HashMap是非synchronized的,並可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。
HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是線程安全的,多個線程可以共享一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。
另一個區別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結構(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這並不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。
由於Hashtable是線程安全的也是synchronized,所以在單線程環境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那麼使用HashMap性能要好過Hashtable。
HashMap不能保證隨著時間的推移Map中的元素次序是不變的。

要注意的一些重要術語:

1) sychronized意味著在一次僅有一個線程能夠更改Hashtable。就是說任何線程要更新Hashtable時要首先獲得同步鎖,其它線程要等到同步鎖被釋放之後才能再次獲得同步鎖更新Hashtable。

2) Fail-safe和iterator迭代器相關。如果某個集合對象創建了Iterator或者ListIterator,然後其它的線程試圖「結構上」更改集合對象,將會拋出ConcurrentModificationException異常。但其它線程可以通過set()方法更改集合對象是允許的,因為這並沒有從「結構上」更改集合。但是假如已經從結構上進行了更改,再調用set()方法,將會拋出IllegalArgumentException異常。

3) 結構上的更改指的是刪除或者插入一個元素,這樣會影響到map的結構。
我們能否讓HashMap同步?

HashMap可以通過下面的語句進行同步:
Map m = Collections.synchronizeMap(hashMap);
結論

Hashtable和HashMap有幾個主要的不同:線程安全以及速度。僅在你需要完全的線程安全的時候使用Hashtable,而如果你使用Java 5或以上的話,請使用ConcurrentHashMap吧。

天天都要努力 發表在 痞客邦 留言(0) 人氣()

有句話說的好...

『妹要走人就是要走人,她告訴你要走人的意思是她要走人,
她說的什麼理由則是一點都不重要。
女生嘛!送你一個蛋糕外面當然要包一些包裝紙啊!
難道你吃蛋糕要吃那些包裝紙嗎?
問人家那些包裝紙有啥含意是毫無意義的。
而且就算你把包裝紙改了,裡面的蛋糕也不會變成燒肉對吧。』

天天都要努力 發表在 痞客邦 留言(0) 人氣()

有句話說的好...

『天要下雨,妹要走人,是這世界上少數任憑你力敵千軍、武勝萬人也沒有辦法阻攔的事情。』

天天都要努力 發表在 痞客邦 留言(1) 人氣()

1.jpg

天天都要努力 發表在 痞客邦 留言(0) 人氣()

IMAG0040

天天都要努力 發表在 痞客邦 留言(0) 人氣()

IMAG0038

天天都要努力 發表在 痞客邦 留言(0) 人氣()

IMAG0034
排了兩個半小時,前面的每個人買票都很不順利,一直連線失敗,
到我的時候,一張票都沒了...

天天都要努力 發表在 痞客邦 留言(0) 人氣()

20110806222958479

天天都要努力 發表在 痞客邦 留言(2) 人氣()

發人深省的小文

----------------------------------------------------------------
從前有個書生,和未婚妻約好在某年某月某日結婚.
到那一天,未婚妻卻嫁給了別人,書生受此打擊,一病不起.
家人用盡各種辦法都無能為力,眼看書生奄奄一息.

天天都要努力 發表在 痞客邦 留言(4) 人氣()

下面是NumberFormat的一些範例   

天天都要努力 發表在 痞客邦 留言(0) 人氣()

JFreeChart類:
void setAntiAlias(boolean flag)字體模糊邊界
void setBackgroundImage(Image image)背景圖片
void setBackgroundImageAlignment(int alignment)背景圖片對齊方式(參數常量在org.jfree.ui.Align類中定義)
void setBackgroundImageAlpha(float alpha)背景圖片透明度(0.0~1.0)
void setBackgroundPaint(Paint paint)背景色
void setBorderPaint(Paint paint)邊界線條顏色
void setBorderStroke(Stroke stroke)邊界線條筆觸
void setBorderVisible(boolean visible)邊界線條是否可見

天天都要努力 發表在 痞客邦 留言(0) 人氣()

在Microsoft Word、Excel、PowerPoint這些軟體中,使用者可以通過選單給檔案增加相關的資訊,包括檔案的標題、主題、摘要、類別、關鍵詞等,同時Application本身還會加入最後使用的使用者、最後使用和修改列印的日期時間等訊息。

天天都要努力 發表在 痞客邦 留言(0) 人氣()

Apache POI 3.0 has been released. POI is a Java library to manipulate various file formats based upon Microsoft's OLE 2 Compound Document format using pure Java; this means you can write Excel files from Java, along with some other capabilities. According to the changelog, this version adds some PowerPoint support, as well as some formula support.

天天都要努力 發表在 痞客邦 留言(0) 人氣()

使用POI來建立Excel檔案已是很常用的功能了,但最近做到需要在Excel欄位中加入註解,這部分是之前沒有實作過的。

上網搜尋了之後,發現要到今年三月份release的poi-3.0-rc1-20070311.jar才含有此功能。

天天都要努力 發表在 痞客邦 留言(0) 人氣()

5/26去考了SCJP1.4的考試。 

這次是第一次考這種認證,Voucher是在JavaWorld拍賣區上買的,接著就上www.2test.com來登記考試時間和考場,之後有要改考試時間或地點都可以到這個網站直接更改,考場我是選在台北恆逸,離捷運站不遠,坐捷運還蠻方便的。

天天都要努力 發表在 痞客邦 留言(0) 人氣()

1 2