JAVA 集合<修改中,未完成>

JAVA容器關係圖算法

 

一.Collection---接口:( ! 爲經常使用內容, * 爲必須掌握的內容, ? 瞭解, 能說出底層實現原理)
 1. Set接口
   *HashSet---實現類(以哈希碼錶爲底層的實現機制)
   ?TreeSet---實現類(以二叉樹(一種數據結構)爲底層的實現機制)
    在Set接口中沒有提供除了Collection接口額外的方法數組

   Colletion a=new HashSet(); 數據結構

   沒有順序, 不能夠重複(能夠互相equals就叫重複),無索引命令行

   無序輸出對象

 2. !List接口
   *ArrayList---實現類(以數組爲底層的實現機制)
   ?LinkedList---實現類(以鏈表爲底層的實現機制)blog

    Collection a=new ArrayList();排序

     有順序, 能夠重複,有索引繼承

     輸出按照索引順序索引

 3. !Map接口(鍵值對)
   *HashMap---實現
   ?TreeMap---實現類
   每次往裏放的時候都是一對一對的(鍵值對)接口

   Collection a=new HashMap();

   鍵值對存放,無序輸出,

 二. Collection接口的方法
   Collection接口的使用

   泛型集合
   Collection<String> c = new ArrayList<String>();
   問題: 爲何不直接寫ArrayList<String> a = new ArrayList<String>();
   c.add(參數類型必須是Object)--> 父類的引用指向子類的對象
   
   c.remove方法: 經過判斷兩個對象是否互相的equals來肯定是否是該刪除該對象, 自定義的類, 須要本身重寫父類的equals方法
   重寫equals方法, 也應該重寫hashCode方法
   
   hashCode一般用來作索引, 一個對象經過它的hashCode的值能夠找到它在內存中的地址, 因此兩個對象若是equals了, 並且又要做爲索引的狀況下, hashCode的值必須相等

 三.*List接口:
  ArrayList(API中說初始容量爲10的, 注意這個問題), LinkedList
  有順序, 能夠重複添加
  !get(索引值)
  !set(索引值)
  !remove(int)
  !remove(Object)---判斷equals
  !indexOf(Object) 返回這個對象首次出如今這個集合中的位置, 若是沒有的話, 返回-1
  !lastIndexOf 返回這個對象最後一次出如今這個集合中的位置, 若是沒有的話, 返回-1
  !clear 清空這個集合

 四.*Map接口:
  !HashMap(哈希表作索引), ?TreeMap(二叉樹作索引)
  鍵值對(鍵不能重複, 什麼叫重複(能夠互相equals就叫重複))
  !put(爲何有個返回值啊親 ?)
  !get
  !remove(key)
  !remove(key, value) 當鍵值對是相對應的時候, 返回值是true
  !containsKey(key)
  !containsValue
  *keySet--返回值--Set
  ?values--返回值--Collection
  !size
  !isEmpty
  ?putAll(Collection)
  ?clear
  練習:使用String[] args在命令行上檢測輸入的字符串數組各自出現的次數

五. !Iterator接口:
  Iterator爲了統一江湖, 今後出現了
  全部實現了Collection接口的容器都有一個iterator方法, 用來返回一個實現了Iterator接口的對象
  Iterator對象稱做迭代器, 用來方便的實現對容器內的元素的遍歷
  Iterator裏面的三個方法:
   hasNext()
   next(), 重點注意: 這個方法每調用一次, 遊標就往下走一個
   remove(), 儘可能不要與父類的方法混着用
  for循環遍歷, 1.5之後纔出現的for(Objetc o : array) {}
   有優勢有缺點

  思考一個問題: 任何繼承了Iterator接口的都要實現它的方法, ArrayList等實現類也實現了這個接口, 爲何API沒有這個方法

六. ?Comparable接口, Collections類   List的經常使用算法:   sort(List); 排序    若是須要對自定義的類進行排序, 那就必需要讓其實現Comparable接口, 實現比較兩個類大小的方法   shuffle(List); 隨機排列   void reverse(List); 逆序排列(LinkedList效率較高)   copy(); 複製集合, 前提是size()相同(長度, 和容量的區別)   fill(List, Object);使用某個對象填充整個List   binarySearch();

相關文章
相關標籤/搜索