【馬士兵】筆記_Java容器

有道雲筆記 連接:

http://note.youdao.com/noteshare?id=62c062e791c11bc0e2a1e65fe4440696


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下可忽略:




 

一個圖,一個類,三個知識點,六個接口

 

多態,三個必要條件:繼承(實現)、方法重寫、父類引用指向子類對象

 

 

HashTableVector也是容器,老舊基本不用。使用時內部是鎖定的,效率低。

 

 

 

 

 

上圖,List是有序可重複集。什麼叫重複

嚴格說,兩個對象不可能重複。儘管有時兩個對象中的數據值相等,但這些值是分別存在於中的,中存的對象引用也就不能相等(不會指向同一個內存地址)。==只在兩個對象的引用相等時才爲true,非常嚴格。

本章指的重複,只要兩個對象equals(),就算重複

boolean containsObject  o),也是看equals(),相等了就算包含。

 

 

上圖,注意到boolean remove(Object o )方法是有參的,即不手動遍歷集合,即可把集合中某元素刪除。

 

上圖,用父類的引用初始化(指向)子類的對象,而不是ArrayList c = new ArrayList(),目的是:增加靈活性。這個對象c,將不能使用ArrayList特有的方法。這樣,在某時程序員發現cLinkedListArrayList更合適時,只需改成Connection c = new LinkedList

另外,Connection不能存基礎數據類型,只能用包裝類;但是支持將字符串作爲String對象直接存進去。

 

 

上圖,c.remove(new Integer(100))返回true,而c.remove(new Name(f1,li))返回false。因爲Name沒有重寫equals()方法,刪除時比較的是==(引用是否相等)。

 

上圖,hashCode是什麼? hashCode跟該對象的內存地址有關,非常適合做索引。兩個對象可以有相等的hashCode,這就需要重寫hashCode()方法。讓相等對象的hashCode相等,是因爲若一個對象作爲Map中的Key,索引的時候按的是Key對象的hashCode

另外,例子中返回的是一個StringhashCode()方法。這是因爲String已經重寫了hashCode(),保證了相等即hashCode相等。

 

 

 

 

 

 

egCollection c = new ArrayList();

Iterator it = c.iterator();

上例,Iterator it = c.iterator() 體現了一種多態Iterator接口只有三個方法;Collection的具體實現類(ArrayList等)都要重寫iterator()方法,返回的是一個Iterator接口的實現類,具體對應是Arraylist,裏面被重寫的三個方法是ArrayList具體的怎麼實現迭代;c.iterator()返回的迭代器是Iterator接口的具體實現類,當然可以用父類的引用指向子類對象,即Iterator it = c.iterator()

 

上圖,在迭代過程中,只能用迭代器對象的remove(),而不能用集合類的remove(Object o)方法。原因是,迭代過程中,迭代器對當前迭代元素進行了“鎖定”。

 

 

 

 

 

上圖,增強的for循環:最大的(唯一)優點是,遍歷數組或集合語法簡便,適合於遍歷並打印集合內容。缺點有兩個:遍歷數組時,for( int i : arr ){ ...... },無法知道遍歷到當前元素的下標;遍歷集合時,不能刪除當前遍歷元素,這是因爲增強for循環內部機制是Iterator,跟其一樣會鎖定當前元素。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

什麼時候用泛型?

API中查一查,類在聲明時加泛型的就可以在使用它時用泛型,聲明時沒泛型的不能用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章