java基礎畢向東day14-15

1.(P169-171)

Collection

    |--List:元素是有序的,元素可以重複。因爲該集合體繫有索引。
        |--ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度很快。但是增刪稍慢。線程不同步。
        |--LinkedList:底層使用的鏈表數據結構。特點:增刪速度很快,查詢稍慢。線程不同步。
        |--Vector:底層是數組數據結構。線程同步。被ArrayList替代了。因爲效率低。


    |--Set:元素是無序,元素不可以重複。、


List:
    特有方法。凡是可以操作角標的方法都是該體系特有的方法。


    add(index,element);
    addAll(index,Collection);


    remove(index);


    set(index,element);

    get(index):
    subList(from,to);
    listIterator();
    int indexOf(obj):獲取指定元素的位置。
    ListIterator listIterator();

List集合特有的迭代器。ListIterator是Iterator的子接口。

在迭代時,不可以通過集合對象的方法操作集合中的元素。
因爲會發生ConcurrentModificationException異常。

所以,在迭代器時,只能用迭代器的放過操作元素,可是Iterator方法是有限的,
只能對元素進行判斷,取出,刪除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

該接口只能通過List集合的listIterator方法獲取。

 

2.(P173)LinkedList:特有方法:

addFirst();
addLast();

getFirst();
getLast();
獲取元素,但不刪除元素。如果集合中沒有元素,會出現NoSuchElementException

removeFirst();
removeLast();
獲取元素,但是元素被刪除。如果集合中沒有元素,會出現NoSuchElementException


在JDK1.6出現了替代方法。

offerFirst();
offerLast();


peekFirst();
peekLast();
獲取元素,但不刪除元素。如果集合中沒有元素,會返回null。

pollFirst();
pollLast();
獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null。

 

3.(P174必須會!)結合LinkedList模擬堆棧或者隊列數據結構

(P175必須會!)去除ArrayList中的重複元素

(P176必須會!)將自定義對象作爲元素存到ArrayList集合中國,並去除重複元素,比如人,同姓名同年齡被視爲同一個人,不進行重複存儲。

知識點:List中判斷存入的兩個對象是否相等的方法是equals();  contain()和remove()方法底層依靠的都是equals();

4. (P178) ArrayList判斷兩個對象是否相等的方法是equals(); HashSet中判斷兩個元素是否相等的方法是hashcode()和equals(),如果hashcode()相等再比較equals();

5.

|--Set:元素是無序(存入和取出的順序不一定一致),元素不可以重複。、
    |--HashSet:底層數據結構是哈希表。是線程不安全的。不同步。
            HashSet是如何保證元素唯一性的呢?
            是通過元素的兩個方法,hashCode和equals來完成。
            如果元素的HashCode值相同,纔會判斷equals是否爲true。
            如果元素的hashcode值不同,不會調用equals。

            注意,對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashcode和equals方法。


  

    |--TreeSet:可以對Set集合中的元素進行排序。
                底層數據結構是二叉樹。
                保證元素唯一性的依據:
                compareTo方法return 0.

                TreeSet排序的第一種方式:讓元素自身具備比較性。
                元素需要實現Comparable接口,覆蓋compareTo方法。
                也種方式也成爲元素的自然順序,或者叫做默認順序。

                TreeSet的第二種排序方式。
                當元素自身不具備比較性時,或者具備的比較性不是所需要的。
                這時就需要讓集合自身具備比較性。
                在集合初始化時,就有了比較方式。 

     當兩種排序都存在時,以比較器爲主。

     定義一個類,實現Comparator接口,覆蓋compare方法。

 

6

 

泛型:JDK1.5版本以後出現新特性。用於解決安全問題,是一個類型安全機制。

好處
1.將運行時期出現問題ClassCastException,轉移到了編譯時期。,
    方便於程序員解決問題。讓運行時問題減少,安全。,

2,避免了強制轉換麻煩。


泛型格式:通過<>來定義要操作的引用數據類型。

在使用java提供的對象時,什麼時候寫泛型呢?

通常在集合框架中很常見,
只要見到<>就要定義泛型。

其實<> 就是用來接收類型的。

當使用集合時,將集合中要存儲的數據類型作爲參數傳遞到<>中即可。

 

7.//(P15-08)泛型類。
/*
什麼時候定義泛型類?
當類中要操作的引用數據類型不確定的時候,
早期定義Object來完成擴展。
現在定義泛型來完成擴展。

 

8. 泛型可以定義在方法上和類上。 1圖是將泛型定義在類上,2圖是講泛型定義在方法上(也可以理解爲在類上沒有聲明泛型型,所以要在方法上聲明該泛型)

泛型的好處示例:  以前必須使用兩個方法,現在使用泛型一個就夠了。你傳入的T是什麼就是什麼類型

 

  

 

 

9.Map集合:

Map集合:該集合存儲鍵值對。一對一對往裏存。而且要保證鍵的唯一性。
    1,添加。
        put(K key, V value) 
        putAll(Map<? extends K,? extends V> m) 

    2,刪除。
        clear() 
        remove(Object key) 

    3,判斷。
        containsValue(Object value) 
        containsKey(Object key) 
        isEmpty() 


    4,獲取。
        get(Object key) 
        size() 
        values() 

        entrySet() 
        keySet() 

Map
    |--Hashtable:底層是哈希表數據結構,不可以存入null鍵null值。該集合是線程同步的。jdk1.0.效率低。
    |--HashMap:底層是哈希表數據結構,允許使用 null 值和 null 鍵,該集合是不同步的。將hashtable替代,jdk1.2.效率高。
    |--TreeMap:底層是二叉樹數據結構。線程不同步。可以用於給map集合中的鍵進行排序。


和Set很像。
其實大家,Set底層就是使用了Map集合。

 

 


 

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