以前寫程序,若是是隊列數據的話,通常都是用ArrayList來做爲存儲介質,可是如今接手公司的新項目,由於以前這個公司是在windows mobile上實現的(也就是C寫的),他們可能更習慣使用Vector,以前也沒有了解過Vector,後來查詢java的api文檔,java確實也有Vector的實現。java
先看下java中對Vector的描述:(對Vector熟悉的下面這段可不看)
windows
Vector
類能夠實現可增加的對象數組。與數組同樣,它包含可使用整數索引進行訪問的組件。可是,Vector
的大小能夠根據須要增大或縮小,以適應建立 Vector
後進行添加或移除項的操做。api
從 Java 2 平臺 v1.2 開始,此類改進爲能夠實現 List
接口,使它成爲 Java Collections Framework 的成員。與新 collection 實現不一樣,Vector
是同步的。 數組
以前看think in java 中也有提到,Vector與List相比,主要的區別就在於,Vector是同步的,List是非同步的,Vector在迭代的時候是不能對隊裏的數據進行增刪操做的,不然會拋出ConcurrentModificationException異常,同理,在單一線程條件下,Vector的效率較之ArrayList等會更低,所以在Android平臺下可能也不太會使用到該類。
spa
下面就是重點了,先看下Vector的類圖:
線程
能夠看到Vector是實現了Serializable接口的,因此很顯然,Intent是能夠傳遞這樣的數據的,可是在實踐中仍是發現問題了,當我在Activity A中將Vector數據put進入intent的bundle中時,在Activity B中去取出數據(getSerializable)時,將其強轉爲Vector,程序會報錯,cant Cast ArrayList to Vector(不能將Arraylist轉換爲Vector類型),見鬼了,後來去搜了下,stackflow上也有哥們問到這樣的問題,有人猜想是全部Collection數據在進入Intent後,都被Android強轉爲Arraylist了,這裏我尚未查詢Android源碼,但根據表現出來的問題也基本是這樣的,哪位大神能夠看下源碼。code
因此,結論就是,儘可能不要在Android中使用Vector,若是確實由於線程同步的問題必須使用,那當你看到那個類轉換異常時也不要驚訝,老老實實把它先用Arraylist盛放起來,再轉回到Vector,或者程序的參數或者返回值接口不要寫死爲Vector,使用List這種泛型,這樣也比較有利於程序的擴展。
對象
算是今天的一點心得,記下來先...索引