IT十八掌掌第十一天課程總結

今天學完IT十八掌第十一天java基礎課程:


學習內容:

 

Vector

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

add("tom");

add(index,"tom");

remove(int index)

數組列表,查詢快,增刪慢。

|---ArrayList

|---Vector

鏈表    查詢較慢,增刪快

|---LinkList  

spacer.gif

Iterator it = list.iterator();

boolean    it.hasNext( )    判斷是否有下一個元素

Next()    取出一個元素

spacer.gif

所以判斷是否有下一個元素,hasNext()

next()返回是Object類對象,注意類型轉換,

可以通過泛型解決,格式<E>        接在類名後指定類型

泛型是編譯時約束,

Set

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

接口,繼承於Collection

實現類

HashSet

TreeSet

蜜蜂與熊的問題,重點搞懂,多線程生產消費。

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

HashSet:

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

  

public int hashCode()

{

}


public boolean equals(Object obj)

{

}

注:

Set不能添加重複元素,判斷是否重複會先調用hashCode()方法判斷

再調用equals方法判斷,兩者都相同時,兩個對象算是重複的。

而與兩個對象是否同一對象無關。

也就是說Set判斷是否重複的範圍超出了同一對象的,不同對象只要

hashCode()和equals()返回相同也會判斷成重複。

remove中也是利用hashCode()和equals()方法來判斷重複的。

問題:兩個相同對象,hashCode()和equals()必定相同嗎?

所以必定重複?

答:不一定,在hashCode()中使用age++,使得兩個相同對象

調用兩次hashCode()方法的返回值不同,hashSet會認爲這兩個對象不重複,

hashSet也能添加這兩個相同對象,所以兩個相同對象不一定是重複的,hashSet

判斷是否重複首先判斷hashCode(),相同後再判斷equals()方法。

只有hashCode()和equals的值相同,纔會判斷兩個元素是重複的,而與是否是同一對象無關。





TreeSet

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

有序的Set,底層採用二叉樹


存儲對象必須具備比較性,自定義比較器Comparator,重寫compare(p1 , p2)方法

或者實現Comparable接口重寫compareTo( p )方法。


comparator自定義比較器

Comparator<Person> comp = new Comparator<Person>( ) {

            public int compare(p1 , p2)

            {

             }

};

//將比較器作爲參數傳遞給TreeSet,使得其按自定義的比較器規則進行排序。

TreeSet<Person> ts = new TreeSet<Person>(comp);

問題:TreeSet通過什麼樣的方式遍歷二叉樹,將需要添加的對象與集合中元素進行比較呢?

spacer.gif

解答:由於TreeSet底層採用的是二叉數,每次遍歷時大數在右邊,小數在左邊。

           從元素的中間數開始判斷(偶數的話去中間數的整數部分,比如2.5就取2位置上的數先比較),

            如下圖的順序,很快就可以將對應元素插入到集合

spacer.gif

問題:TreeSet怎麼判斷兩個元素是否重複。

通過比較器判斷,如果返回0,兩個元素則是重複的。

Map

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

spacer.gif

HashMap

spacer.gif

spacer.gif



遇到的問題:

  1,TreeSet使用比較器判斷是否重複時是如何取數據的,經驗證採用的是遍歷二叉樹。

  2,HashSet和HashMap的區別與聯繫,HashSet底層採用的是HashMap,HashMap中的元素是key-value形式的。



需要幫助的問題

Map應用


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