【Java】標記介面
Clonable介面
第一次見到還是Clonable介面,為什麼會沒有方法?
那實現了有什麼用?
可以看註釋的這一句話
* A class implements the <code>Cloneable</code> interface to
* indicate(表明) to the {@link java.lang.Object#clone()} method that it
* is legal for that method to make a
* field-for-field copy of instances of that class.
實現了Cloneable介面的類,表明它可以合法的使用域之間的複製。
其實也就是實現了Cloneable介面,才有能力使用Clone()方法,而Object類裡面本身就有宣告Clone()方法,所以Clonable介面就不用再宣告瞭。
這就是所謂的標記介面:
這些介面沒有任何的方法,實現此介面的類,才可以合法的使用某些功能
Serializable介面
這個介面是用來標記類是否支援序列化的,所謂的序列化就是將物件的各種資訊轉換成可以儲存或者傳輸的一種形式。
這也就是為什麼使用位元組流深拷貝物件要實現序列化介面了,這樣才能通過流傳輸物件資訊。
如果一個類沒有實現該介面,卻被拿去序列化的了,那麼虛擬機器就會丟擲不支援序列化的異常,同Clonable。
RandomAccess介面
這個介面的作用是判斷集合是否能快速訪問,也就是通過索引下標能否快速的移動到對應的元素上。我們在使用某個集合類中,集合中的元素可以通過索引index下標快速的訪問到,那麼在該類的定義處,一般會有一個RandomAccess介面的實現標籤
判斷了之後,才能根據不同集合的性質來使用不同的方法。
比如ArrayList 和 LinkedList 同時使用方法Collections.binarySearch()
由此可以看出,判斷list是否實現RandomAccess介面來實行indexedBinarySerach(list,key)或iteratorBinarySerach(list,key)方法。ps(instanceof其作用是用來判斷某物件是否為某個類或介面型別)那麼,又有人疑問,執行這兩個方法有什麼不同?
檢視下indexedBinarySerach(list,key)方法原始碼:
-------------------------------------------------------------------------------------------------------------
檢視下iteratorBinarySerach(list,key)方法原始碼:
通過檢視原始碼,發現實現RandomAccess介面的List集合採用一般的for迴圈遍歷,而未實現這介面則採用迭代器。
接下來,我們將進行下測試ArrayList以及LinkedList採用這兩種方法各自的效能是如何!
-------------------------------------------------------------------------------------------------------------
main方法:
-------------------------------------------------------------------------------------------------------------
for迴圈遍歷ArrayList-------------------------------------------------------------------------------------------------------------
iterator迭代器遍歷ArrayList
-------------------------------------------------------------------------------------------------------------
for迴圈遍歷LinkedList-------------------------------------------------------------------------------------------------------------
iterator迭代器遍歷LinkedList
-------------------------------------------------------------------------------------------------------------
執行結果:從上面資料可以看出,
ArrayList用for迴圈遍歷比iterator迭代器遍歷快,LinkedList用iterator迭代器遍歷比for迴圈遍歷快,
所以說,當我們在做專案時,應該考慮到List集合的不同子類採用不同的遍歷方式,能夠提高效能!
---------------------
作者:DriveMan
來源:CSDN
原文:https://blog.csdn.net/weixin_39148512/article/details/79234817
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關文章
- 什麼是Java Marker Interface(標記介面)Java
- Java筆記 介面(更新)Java筆記
- java中break標記的使用Java
- Java : 常用重點正則標記Java
- Java學習筆記之介面和抽象類Java筆記抽象
- java介面Java
- java 介面Java
- 非標準物件介面物件
- 標識介面的作用
- SATA介面標準(zt)
- java之介面Java
- SAP MM MI01介面上的‘Freeze book inventory’標記初探
- Java 自學 - 介面與繼承 介面Java繼承
- Java使用位域進行多標記(狀態)管理Java
- Java學習--java中的集合框架、Collection介面、list介面Java框架
- HTML標記之a標籤HTML
- golang拾遺:指標和介面Golang指標
- 標準IO常用函式介面函式
- Java™ 教程(Collection介面)Java
- Java™ 教程(Set介面)Java
- 介面的使用(Java)Java
- JAVA集合——Map介面Java
- Java的Future介面Java
- java基礎-介面Java
- Java-介面(interface)Java
- java介面例項Java
- java介面回撥Java
- Java中ListIterator介面Java
- Java中的介面Java
- java 工資-介面Java
- java之介面interfaceJava
- Java語言獲取小紅書商品詳情 API介面(商品ID、商品標題等)JavaAPI
- 誰說Java無指標, JAVA連結串列指標也好煩 - Java 指標迴歸Java指標
- java 介面(翻譯自Java Tutorials)Java
- 記事本介面
- java設計模式學習筆記-5-介面卡模式Java設計模式筆記
- 學習java筆記 --- 一個實現Iterable介面的小范例Java筆記
- 類與介面(三)java中的介面與巢狀介面Java巢狀