List,Set,Collections工具類

# List、Set

    1. 數據結構
        * 棧結構:先進後出
        * 隊列結構:先進先出
        * 數組結構:是有序的元素序列,數組是在內存中開闢一段連續的空間,並在此空間存放元素。就像是一排出租屋,有100個房間,從001到100每一個房間都有固定編號,經過編號就能夠快速找到租房子的人。
            * 數組特色:查詢快,增刪慢。且數組的長度在內存中是固定的,不可改變。存儲位置連續
            * 指定索引位置增長元素:須要建立一個新數組,將指定新元素存儲在指定索引位置,再把原數組元素根據索引,複製到新數組對應索引的位置。
            * 指定索引位置刪除元素:須要建立一個新數組,把原數組元素根據索引,複製到新數組對應索引的位置,原數組中指定索引位置元素不復制到新數組中。
        * 鏈表結構:由一系列結點node(鏈表中每個元素稱爲結點)組成,結點能夠在運行時i動態生成。每一個結點包括兩個部分:一個是存儲數據元素的數據域,另外一個是存儲下一個結點地址的指針域。常說的鏈表分爲單項鍊表和雙向鏈表,單項鍊表每一個結點只能指向下一個結點,而雙向鏈表能夠指向前一個和下一個結點。
            * 鏈表特色:
                * 查找元素慢:想查找某個元素,須要經過鏈接的節點,依次向後查找指定元素
                * 增刪元素快:
                    增長元素:只須要修改鏈接下個元素的地址便可。
                    刪除元素:只須要修改鏈接下個元素的地址便可。
                * 長度不固定,存儲位置不必定連續

    2. List
        1. 特色
            有序(存進去和取出來的順序一致)
            有索引,方便查詢,可是增刪元素較慢
            能夠存儲重複元素
        2. 特有方法(可以使用索引的方法)
            * void add(int index,E e):給指定的位置添加元素
            * E remove(int index):刪除指定位置元素,並返回bool類型的刪除結果
            * E set(int index,E e):修改指定位置的元素爲e,並返回被修改的原數據。
            * E get(int index):獲取指定位置元素
        3. ArrayList<T>
            * 使用數組結構,查詢快,增刪慢
        4. LinckedList<T>
            * 底層是鏈表結構,查詢慢,增刪快
            * 能夠進行首位操做,因此Lincked有6個特有方法:
                * addFirst()  addLast()
                * removeFirst()  removeLast()
                * getFirst()  getLast()
        5. Vector
            * 底層也是數組結構
            * Vector與ArrayList的區別:
                * 相同點:
                    底層都是數組結構,特色就是查詢塊,增刪慢
                  不一樣點:
                    Vector是線程安全的,效率低
                    ArrayList線程不安全的,效率高

    3. Set
        1. HashSet(無序,不可重複,無索引)
            * LinkedHashSet:有序
            * 如何保證Set集合內元素惟一呢?
                * 依賴兩個方法hashCode方法,equals方法
                    先執行hashCode方法,會和集合中的每個元素的hash值進行比較,若是不一樣,直接添加
                        若是相同,執行equals方法判斷,若是相同,就不添加,若是不一樣就添加元素

        2. 集合使用的選擇:
            容許存儲重複元素:
                是:使用List集合
                    查詢多仍是增刪多
                        查詢多:選擇ArrayList
                        增刪多:選擇LinkedList
                        
                    不知道是查詢多仍是增刪多,就使用ArrayList
                        
                        
                否:使用set集合
                    有序嗎?
                        是:選擇LinkedHashSet
                        否:選擇HashSet
                        
                    不知道是否有序使用HashSet
                    
              什麼都不知道選擇ArrayList

              適當的狀況選擇適合的容器能夠增長咱們的代碼效率

    4. 可變參數
        定義:
            修飾符 返回值類型 方法名(數據類型... 參數名) {
                在方法中使用參數參數就能夠看作是數組
            }
            
        使用:
            方法名(參數) // 參數能夠是0個,也能夠是多個
    5. Collections工具類
        * 特色:
                構造方法私有
                成員靜態
        
        *方法:
            sort(List list):按照天然排序
            sort(List list, Compartor c): 按照比較器進行排序

            天然排序就是按照默認規則由小到大排序(集合內容是可比較的類型)

            比較器排序: 集合中存儲的元素的類型實現了Comparable(可比較的)接口
        
            ArrayList<String> list = new ArrayList<>();
            Collections.sort(list, new Compartor() {
            
                重寫方法
            });
node

相關文章
相關標籤/搜索