2010年7月22日 星期四

String/StringBuffer, Vector/ArrayList, HashMap/Hashtable, Interface/Abstract class, Preparedstatement/Statement

String StringBuffer 的區別~
JAVA平台提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類 提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用 StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據

ArrayList,Vector, LinkedList的存儲性能和特性~
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後 項即可,所以插入速度較快

HashMapHashtable的區別~
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap允許空(null)鍵值(key),由於線程安全(Synchronized),效率上可能高於Hashtable
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。


abstract classinterface有什麼區別~
聲明方法的存在而不去實現的類(class)被叫做抽像類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽像類,並讓它指向具體子類的一個實例。不能有抽像構造函數或抽像靜態方法。Abstract 類的子類為它們父類中的所有抽像方法提供實現,否則它們也是抽像類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽像的, 沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。 然後,它可以在實現了該接口的類的任何對像上調用接口的方法。由於有抽像類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到 接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。

Interface:
完全的class藍圖,只能定義名稱,無法定義內容
1. multiple inheritance: A class may implement multiple interfaces.
2. default implementation: An interface cannot provide any code at all, much less default code.

Abstract class:
abstract method可只定義名稱,但不給定內容
class的藍圖建立起來,由subclass實做
至少擁有一abstract methodclass稱為abstract class
1. multiple inheritance: A class may extend only one abstract class.
2. default implementation: An abstract class can provide complete code, default code, and/or just stubs that have to be overridden.


JDBC Preparedstatement Statement 的區別~
Statement 是在執行時才會去編譯SQL語法,
而PreparedStatement 是預先編譯(precompiled)SQL語法,待不定個數的參數代入時才去執行SQL。
所以如果當SQL語法固定且重複性高時,使用PreparedStatement的效率會比較好。

另外,使用PreparedStatement也可以相對的避免一些SQL Injection。

PreparedStatement 也不是沒有缺點,就是因為代入參數,所以無法知道真正執行程式時的SQL語法,造成debug的難度增加。




沒有留言:

張貼留言