[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四

JAVA按如下重要順序
· 面向對象
· 類集框架
· JDBC
· 文件編程
本季目標
主要講解如下的內容:
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each語句(JDK 1.5的新特性)
· Comparable接口
· 二叉樹
一、類集結構
(1)類集的產生目的
類集簡單來說就是一個動態的對象數組,此對象數組能夠改變大小,能夠任意的實現對象的增長、刪除、輸出。全部的類集存放java.util包中。
(2)類集的劃分
一、存放單值:Collection
二、存放一對值:Map
三、輸出:Iterator
(3)類集的具體概念
<1>Collection(只能存放一個值)
|- 主要功能:用於輸出使用
|- 子接口:List(容許有重複的元素,並且加入的順序就是輸出的順序)
    |- 子類:ArrayList,是在Java 2以後推出的,是新的類,是使用異步處理方式,其性能較高
    |- 子類:Vector,是在JDK 1.0的時候就推出,由於是舊的類,有不少List所沒有的功能,是使用同步處理方式,其線程安全性較高,會比較慢。使用Vector除了可使用Iterator輸出以外,也可使用Enumeration進行輸出。二者是通用的。Vector子類容許直接使用 addElement(Object obj),也是能夠向集合中加入元素的。
    |- 本身新增的方法:
        |- 取每個對象: public Object get(int ind) ;
    |- 子類:Stack(棧)
|- 子接口:Set(不容許有重複元素,重複元素會替換)?如何能夠區分重複元素呢? 
    |- 子類:HashSet:是無序列存放
    |- 子類:TreeSet:有序存放,是經過Comparable接口完成的
|- 經常使用方法:
    |- 增長一個對象: public boolean add(Object obj)
    |- 取得類集的長度: public int size() ;
    |- 判斷集合中的內容是否爲空: public boolean isEmpty()
    |- 刪除一個對象: public boolean remove(Object obj) :就必須牽扯到對象的比較狀態。
    |- 實例化Iterator對象: public Iterator iterator() ;
<2>JDK 1.5提供了一個方便的輸出操做:for…each語句。
<3>Iterator接口輸出是最多見的

|- 經常使用方法
    |- public boolean hasNext():判斷是否有下一個元素
    |- public Object next():取出下一個元素
|- 子接口:ListIterator,能夠進行雙向輸出,只對於List接口有用
    |- 經常使用方法:具有了Iterator接口中的所有內容
        |- public boolean hasPrevious()
        |- public Object previous() 
<4>Enumeration(在1.5以後也加入、泛型支持哈~)
|- 經常使用方法:
    |- 判斷是否有下一個元素: public boolean hasMoreElements()
    |- 取出元素: public Object element()
五、 Map(存放一對值)
|- 功能:與Collection的功能不同,Map的主要功能是用於查找使用的。
|- 注意點:
    |- 使用Map操做時,不能直接使用Iterator進行輸出。
    |- 並且裏面不能有重複key。
    |- 若是非要使用Iterator進行輸出,則必須按如下的步驟進行操做:
|- Map --> Set --> Iterator --> Map.Entry --> key與value的分離
|- 經常使用子類:
    |- HashMap:無序存放,是新的類,是JDK 1.2時推出的,是異步處理,性能較高
    |- Hashtable:是舊的類,是JDK 1.0時推出的,是線程安全的,性能較低
        |- Properties(重點):屬性文件操做類
    |- TreeMap:有序存放
|- 經常使用方法:
    |- 向集合中保存數據: public Object put(Object key,Object value):返回的是value
    |- 從集合中查找數據: public Object get(Object key):根據key查找。
    |- 將Map數據變爲Set實例: Set<Map.Entry<K,V>> entrySet()
    |- 將所有的key變爲set實例: Set<K> keySet()
    |- 將所有的vlaue變爲Collection接口實例: Collection<V> values()
|- Map.Entry:保存key與value
    |- public Object getKey()
    |- public Object getValue()
|- 存放key的注意點:
################Michael分割線####################
二、代碼講解
(11)HashMap
Map的基本應用
image 
若是查到了,則返回具體的值,若是沒有查到,則返回null
image
使用Iterator輸出Map接口中的內容
image
HashSet:是無序列存放滴~~~
image
將所有的key進行輸出
image
image
輸出所有的值
  image
image
(12)Hashtable
image
image
(13)TreeMap
按key進行排序,本操做中依然使用了Comparable接口。
image
TreeSet:有序存放,是經過Comparable接口完成的
image
(14)Stack
入棧:public Object push(Object obj)
出棧:public Object pop()

注意點:若是此時棧中已經沒有內容了,則會出現異常。
image
image
(15)Properties(重點
· 屬性操做類,全部的key 與value 都按屬性設置,都是字符串。並且此屬性文件能夠直接保存在文件中,或從文件中讀取出來。
設置屬性: public Object setProperties(String key,String value)
取得屬性:
|- public String getProperty(String key) 根據key讀取屬性,返回值
|- public String getProperty(String key,String def) :若是沒有讀到值,則返回def指定的內容。
保存在文件中:
|- 保存成普通文件: public void store(OutputStream out,String comments) throws IOException
|- 保存成XMl文件: public void storeToXML(OutputStream out,String comments) throws IOException
從文件中讀取屬性:
|- 從普通文件中讀取:public void load(InputStream input) throws IOException
|- 從XML文件中讀取: public void loadFromXML(InputStream input) throws IOException
image
image
將內容保存成普通文件:
image
image
將內容保存爲XML文件:
image
image
從XML文件中把屬性讀取出來
  image
image
(16)Map重要補充
  image
image
以上的程序能夠經過key找到value。
如今把代碼反過來
image
image
代碼反過來以後,發現沒有獲得真正想要的內容,而是返回了null。
image
image
此時若是要經過匿名對象來看成key,找到屬性的話,就必須牽扯到Object中的幾個方法:
· 對象比較:
· 經過hashCode;
  image
image
Java中是經過equals和hashCode方法去確認對象惟一性,能夠進行比較。
可是以上的程序須要一點更改,由於不能讓全部對象的hashCode方法的返回值都是同樣的,因此能夠通過一些本身簡單的運算。
image
image
一個完整的類最好覆寫Object類中的三個方法:
· hashCode
· equals
· toString
(17)額外補充(對象克隆)
就是把對象的內容從新複製一份,複製出一個新的對象
protected Object clone() throws CloneNotSupportedException
克隆方法是一個受保護的方法。因此在其須要對象被克隆的子類中必須擴大權限,不然外部沒法看見。
對象所在的類必須實現Cloneable接口
Java程序中經常使用的有兩大標識接口:
· 可序列化:Serializable
· 可克隆:Cloneable
  image
image
總結
就是向裏面不斷加入元素,能夠動態的擴充,並且能夠有存放單值的,也能夠有存放一對值的。
並且在集合中對於排序,使用的是Comparable接口。
實例的模型很重要 —— Hibernate、EJB 3.0。
######################Michael分割線#############################
相關文章
相關標籤/搜索