Java之容器
??? 容器
Collection接口定義了存取一組對象的方法,其子接口Set和List分別定義了存儲方式
?? ?·Set中的數據對象沒有順序且不可以重復?? ?HashSet
?? ?·List中的數據對象有順序且可以重復?? ??? ?LinkedList(底層為鏈表)? ArrayList(底層為數組)
?? ??? ?
·Array讀快改慢
·Linked改快讀慢
·Hash兩者之間
Map接口定義了存儲“鍵(key) - 值(value)映射對”的方法?? ?HashMap
①Collection接口中所定義的方法
?? ?int size()
?? ?boolean isEmpty()
?? ?void clear()
?? ?boolean contains(object element)?? ?//是否包含了element元素
?? ?boolean add(object element)
?? ?boolean remove(object element)
?? ?Iterator iterator();
?? ?boolean containsAll(Collection c)?? ?//是否包含了集合c里面的所有元素
?? ?boolean addAll(Collection c)?? ??? ?
?? ?boolean removeAll(Collection c)?? ??? ?//移除有集合c里面的所有元素
?? ?boolean retainAll(Collection c)?? ??? ?//跟另一個集合的交集
?? ?Object[] toArray()
②Iterator接口?? ??? ?為了統一遍歷Collection中方法,
?? ?·所有實現了Collection接口的容器類都有一個iterator方法用以返回一個實現了Iterator接口的對象
?? ?·Iterator對象稱作迭代器,用以方便的實現對容器內元素的遍歷操作
?? ?·Iterator接口定義了如下方法
?? ??? ?·boolean hasNext()?? ?//判斷游標右邊是否有元素
?? ??? ?·object next()?? ??? ?//返回游標右邊的元素并將游標移動到下一個位置
?? ??? ?·void remove()?? ??? ?//刪除游標左面的元素,在執行完next之后該操作只執行一次
補充:增強的for循環 ?
?? ?缺陷:
?? ??? ?·數組:不能方便的訪問下標值
?? ??? ?·集合:與使用iterator相比,不能方便的刪除集合中的內容
?? ?總結:除了簡單遍歷并讀出其中的內容
?? ?int[] arr = {1,2,3,4,5};
?? ?for(int i : arr){
?? ??? ?System.out.println(i);
?? ?}
?? ?Collection c = new ArrayList();
?? ?c.add();
?? ?c.add();
?? ?c.add();
?? ?for(Object o : c){
?? ??? ?System.out.println(o);
?? ?}
③Set接口
?? ?·Collection的子接口,Set接口沒有提供額外的方法,但實現Set接口的容器類中的元素是沒有順序的,而且不可以重復
?? ?·Set容器可以與數學中“集合”的概念相對應
?? ?·J2sDK API中所提供的Set容器類有HashSet,TreeSet等
④List接口
?? ?·List接口是Collection的子接口,實現List接口的容器類中的元素是有順序的,能重復的
?? ?·List容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據序號存取容器中的元素
?? ?·J2SDK 所提供的List容器類有ArrayList,LinkedList等。
?? ??? ?List容器常用算法
?? ??? ??? ?·void sort(List) 對List容器內的元素排序
?? ??? ??? ?·void shuffle(List) 對List容器內的對象進行隨機排序
?? ??? ??? ?·void reverse(List) 對List容器內的對象進行逆序排列
?? ??? ??? ?·void fil(List, object) 用一個特定的對象重寫整個List容器
?? ??? ??? ?·coid copy(List dest, List src) 將src List容器內容拷貝到dest List容器
?? ??? ??? ?·int binarySearch(List,object) 對于順序的List容器,采用折半查找的方法查找特定對象
⑤comparable接口
?? ?·所有可以“排序”的類都實現了此方法,
?? ?·只有一個方法public int compareTo(object obj);
?? ??? ?返回0 表示 this == obj
?? ??? ?返回正數 表示 this > obj
?? ??? ?返回負數 表示 this < obj
⑥Map接口?? ?
?? ?·實現Map接口的類用來存儲鍵 -值 對
?? ?·Map接口的實現類有HashMap 和 TreeMap 等
?? ?·Map類中存儲的鍵 - 值對通過鍵來標識,所以鍵值不能重復
?? ??? ?Object put(Object key, Object value)
?? ??? ?Object get(Object key)
?? ??? ?Object remove(Object key)
?? ??? ?boolean containsKey(Object key)
?? ??? ?boolean containsValue(Object value)
?? ??? ?int size()
?? ??? ?boolean isEmpty()
?? ??? ?void putAll(Map t)
?? ??? ?void clear()
自動打包 Auto-boxing/unboxing
?? ?·在核實的時機自動打包、解包
?? ?·自動將對象轉換為基礎類型
泛型Generic
起因:
?? ?·JDK1.4以前類型不明確:
?? ??? ?·裝入集合的類型都被當作Object對待,從而失去自己的實際類型
?? ??? ?·從集合中取出時往往需要轉型,效率低,容易產生錯誤
解決辦法
?? ?·在定義集合的時候同時定義集合中對象的類型
?? ?·實例:
?? ??? ?·可以再定義Collection的時候指定
?? ??? ?·也可以在循環時用Iterator指定
?? ?List<String> c = arrayList<String>();
?? ?Iterator<String> it = c2.iterator();
?? ?
?? ?
好處
?? ?·增強程序的可讀性和穩定性
補充:Object是所有類的父類,其中的一些方法
?? ?toString()方法
?? ?·public String toString() 描述當前對象的有關信息
?? ?·在進行String與其它類型數據的連接操作時,(如:System.out.println("info" + person))將自動調用該對象類的toString()方法
?? ?·可以根據需要在用戶自定義類型中重寫toString()方法
?? ?hashCode()方法
?? ?哈希碼
?? ?equals()方法 相當于“==” 所以大多數類中重寫了equals()方法
?? ?public boolean equals(Object obj)
?? ?比較對象是否相等,重寫
?? ?public boolean equals(Object obj){
?? ??? ?if(obj == null) return false;
?? ??? ?else{
?? ??? ??? ?if(obj instanceof class){??? //class類,判斷obj是否屬于class類
?? ??? ??? ??? ?Class c = (class)obj;
?? ??? ??? ??? ?if(c.color == this.color && ...){?? //所有屬性都相同
?? ??? ??? ??? ??? ?return true;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
總結:1136
?? ?·一個圖
?? ??? ?Collection?? ??? ??? ??? ?Map
?? ??? ?/?? ?\?? ??? ??? ??? ? |
?? ????? set?? ?list?? ??? ??? ?????? hashMap
?? ????? /?? ??? ?/?? \
?? ??? hashSet arrayList? linkedList?? ??? ??? ?
?? ?·一個類
?? ??? ?·Collections
?? ?·三個知識點
?? ??? ?·for
?? ??? ?·Generic(泛型)
?? ??? ?·Auto-boxing/unboxing
?? ?·六個接口
?? ??? ?·colleciton
?? ??? ?·set
?? ??? ?·list
?? ??? ?·map
?? ??? ?·Iterator
?? ??? ?·comparable
總結