重要接口—RandomAccess接口
原文作者:志波同学
原文地址:Java编程:RandomAccess接口
目录
一、随机访问和串行访问
二、快速随机访问
RandomAccess 是一个标记接口,标识实现该接口的类支持快速随机访问。
一、随机访问和串行访问
举个例子:在 Java 中,有 ArrayList 和 LinkedList 两种数据类型。
- ArrayList 是基于数组实现的,可以通过数组下表灵活的访问列表中的任意元素。像 ArrayList 这种设计,我们就称之为随机访问。
- LinkedList 是基于 next 引用实现的,只能通过串行的方式,从头到尾逐个查找目标元素。像 LinkedList 这种设计,我们称之为串行访问。
二、快速随机访问
代码一:
for (int i=0, n=list.size(); i < n; i++)list.get(i);代码二:
for (Iterator i=list.iterator(); i.hasNext(); )i.next();
package java.util;/***1. 被 List 实现类使用的标记接口,标识该类支持快速随机访问(通常是常量访问时间)。该接口的主要目的是在进行随机或者串行访问 list 时,允许算法修改他们的行为来获得更好的性能。** 2. 将随机访问 lists(如 ArrayList)的最好算法应用于顺序访问 lists(如 LinkedList)时,可能会产生二次行为(我的理解:这里的二次行为指的是通过遍历 LinkedList ,找到目标对象,
*这比通过 ArrayList 银锁直接获取目标对象,多了一个遍历行为,这个遍历行为就是二次行为)。如果将随机访问算法应用于串行访问 list 时,将会产生较差的性能。鼓励通用列表算法在应用之前,
*先检查 List 是否实现了 RandomAccess 接口,如果实现该接口,则采用快速随机访问法进行遍历,否则使用迭代器的方式进行访问。* 3. 人们认识到随访访问和串行访问的区别通过是模糊的。例如,如果 List 变得很大,则提供渐近线性的访问时间,然而在实践中基本上是常量访问时间,像这样的 List 应该实现RandomAccess 接口。根据经验,如果“算法一”的访问速度比“算法二”快,则 List 应该实现RandomAccess 接口。* algorithm1:* <pre>* for (int i=0, n=list.size(); i < n; i++)* list.get(i);* </pre>* runs faster than this loop:* algorithm2:* <pre>* for (Iterator i=list.iterator(); i.hasNext(); )* i.next();* </pre>* <p>This interface is a member of the* <a href="{@docRoot}/../technotes/guides/collections/index.html">* Java Collections Framework</a>.** @since 1.4*/
public interface RandomAccess {
}
重要接口—RandomAccess接口相关推荐
- ArrayList 为什么要实现 RandomAccess 接口?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | http://t.cn/AilfR3YW 在我们的开发中 ...
- Java ArrayList 为什么要实现 RandomAccess 接口?
在我们的开发中,List接口是最常见不过,而且我们几乎每天都在用ArrayList或者LinkedList,但是细心的同学有没有发现,ArrayList中实现了RandomAccess接口,而Link ...
- 关于接口 RandomAccess
今天看到java.util.Collections这个工具类中的 public static <T> void fill(List<? super T> list, T obj ...
- 【Java】ArrayList 为啥要实现 RandomAccess 接口
1.概述 转载:http://www.javastack.cn/article/2019/why-arraylist-impl-randomaccess-interface/ 在我们的开发中,List ...
- RandomAccess接口
RandomAccess是一个标记接口,实现该接口表示支持快速访问.这是一个空接口,没有任何方法. 当实现该接口时,说明支持快速访问. 即: for (int i=0, n=list.size(); ...
- 开课吧之Java常见面试题之RandomAccess接口
RandomAccess接口?* 查看源码我们发现实际上 RandomAccess 接口中什么都没有定义.所以,在我看来 RandomAccess 接口不过是一个标识罢了.标识什么? 标识实现这个接口 ...
- RandomAccess接口使用
引子: RandomAccess在类Collections的shuffle()方法中的使用:(jdk源码如下) Java代码 <span style="font-size: s ...
- RandomAccess接口详解
RandomAccess接口详解 Interface RandomAccess All Known Implementing Classes: ArrayList, AttributeList, Co ...
- RandomAccess接口的使用
http://blog.csdn.net/keda8997110/article/details/8635005 引子:RandomAccess在类Collections的shuffle()方法中的使 ...
最新文章
- 这就是我向您推荐使用Thunderbird邮件客户端的理由
- where()函数的用法
- 001考试类小程序设计方案简要需求分析和数据库简要设计
- linux如何修改主机名
- 达梦数据库中服务器日志的开关
- luogu_1002 过河卒
- 不停止mysql就卸载_MYSQL安装与卸载(一)
- [置顶] Postman插件下载安装与使用教程
- Qunit 和 jsCoverage使用方法(js单元测试)
- 深度学习的实用层面 —— 1.4 正则化
- 今天执行grep命令差点把服务器搞崩
- mysql数据库分页查询,limit语句用法
- 计算机在饲养管理方面的应用,高新技术对奶牛业的应用
- 数据中心服务器机柜电气参数,数据中心服务器机柜选择指南
- Android 软键盘的那些坑,原理篇来了!
- OneNote for Windows10 闪退 的解决办法
- PyQt5 与 PySide2 所有事件大集合,一段代码包括键盘、鼠标和窗口所有事件
- CImageList::GetImageInfo取到的bitmap不能用
- WPS 两个 word 合并
- 深度学习(10)ablation experiments