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

java愛好者i發表於2019-04-02

1、類集結構

(1)類集的產生目的

類集簡單來講就是一個動態的物件陣列,此物件陣列可以改變大小,可以任意的實現物件的增加、刪除、輸出。所有的類集存放java.util包中。

(2)類集的劃分

1、存放單值:Collection

2、存放一對值:Map

3、輸出: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()

5、 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 keySet()

|- 將全部的vlaue變為Collection介面例項:Collection values()

|- Map.Entry:儲存key與value

|- public Object getKey()

|- public Object getValue()

|- 存放key的注意點:

################Michael分割線####################

2、程式碼講解

(11)HashMap

Map的基本應用

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

如果查到了,則返回具體的值,如果沒有查到,則返回null

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

使用Iterator輸出Map介面中的內容

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

HashSet:是無序列存放滴~~~

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

將全部的key進行輸出

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

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

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

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

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

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

(13)TreeMap

按key進行排序,本操作中依然使用了Comparable介面。

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

TreeSet:有序存放,是通過Comparable介面完成的

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

入棧:public Object push(Object obj)

出棧:public Object pop()

注意點:如果此時棧中已經沒有內容了,則會出現異常。

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
(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

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
將內容儲存成普通檔案:

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
將內容儲存為XML檔案:

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
從XML檔案中把屬性讀取出來

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
(16)Map重要補充

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
以上的程式可以通過key找到value。

現在把程式碼反過來

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
程式碼反過來之後,發現沒有得到真正想要的內容,而是返回了null。

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

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

此時如果要通過匿名物件來當作key,找到屬性的話,就必須牽扯到Object中的幾個方法:

· 物件比較:

· 通過hashCode;

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
Java中是通過equals和hashCode方法去確認物件唯一性,可以進行比較。

但是以上的程式需要一點更改,因為不能讓所有物件的hashCode方法的返回值都是一樣的,所以可以經過一些自己簡單的運算。

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

[零基礎學JAVA]Java SE應用部分-35.JAVA類集之四
一個完整的類最好覆寫Object類中的三個方法:

· hashCode

· equals

· toString

(17)額外補充(物件克隆)

就是把物件的內容重新複製一份,複製出一個新的物件

protected Object clone() throws CloneNotSupportedException

克隆方法是一個受保護的方法。所以在其需要物件被克隆的子類中必須擴大許可權,否則外部無法看見。

物件所在的類必須實現Cloneable介面

Java程式中常用的有兩大標識介面:

· 可序列化:Serializable

· 可克隆:Cloneable

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

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

就是向裡面不斷加入元素,可以動態的擴充,而且可以有存放單值的,也可以有存放一對值的。

而且在集合中對於排序,使用的是Comparable介面。

例項的模型很重要 —— Hibernate、EJB 3.0

歡迎工作一到五年的Java工程師朋友們加入Java架構師:697558955

群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

相關文章