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
版权声明:本文为博主原创文章,转载请附上博文链接!