【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 : 常用重點正則標記Java
- 工作學習筆記(七)Java的介面筆記Java
- CAD標記、刪除標記、放大標記、縮小標記
- 介面設計標準
- java之介面Java
- SAP MM MI01介面上的‘Freeze book inventory’標記初探
- Java使用位域進行多標記(狀態)管理Java
- Java™ 教程(Set介面)Java
- Java™ 教程(Collection介面)Java
- Java中ListIterator介面Java
- Java-介面(interface)Java
- JAVA集合——Map介面Java
- Java中的介面Java
- Java的Future介面Java
- java基礎-介面Java
- 介面的使用(Java)Java
- Java 自學 - 介面與繼承 介面Java繼承
- openGauss 支援標準開發介面
- golang拾遺:指標和介面Golang指標
- 標準IO常用函式介面函式
- java設計模式學習筆記-5-介面卡模式Java設計模式筆記
- 記事本介面
- 手寫Spring,定義標記型別Aware介面,實現感知容器物件Spring型別物件
- 類與介面(三)java中的介面與巢狀介面Java巢狀
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- Java 獲取Word批註所標記的文字和圖片Java
- Java介面與陣列Java陣列
- JAVA常用類--AutoCloseable介面Java
- Java的抽象類 & 介面Java抽象
- java 介面卡模式Java模式
- JAVA集合框架 - Map介面Java框架
- Java學習之介面Java
- Java 介面與抽象方法Java抽象
- java中的interface(介面)Java
- Java函式式介面Java函式
- java基礎:CompletionStage介面Java