目前分類:Java (7)

瀏覽方式: 標題列表 簡短摘要
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) 人氣()

下面是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) 人氣()

DOJO網頁位置:http://dojotoolkit.org/

使用JavaScript中的Alert功能時,是否會覺得預設之Alert訊息盒樣式不好看,或是跟網頁整體設計不搭配。 

之前曾經使用過div標籤來做自己的Alert訊息欄,但此方式的缺點為此訊息盒不可以自由移動,只可顯示在網頁的固定位置。 

於是後來使用了DOJO的FloatingPane功能,來實作自訂的Alert訊息盒。

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