Java 1.8 RandomAccess接口

【Java】ArrayList1.8源码阅读 ArrayList源码阅读注释 前言 ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。 package java.util; import java.util.function.Consumer; import java.u 阅读详情

Java 1.8 RandomAccess接口

简介

RandomAccess接口从jdk1.4开始提供,接口中没有定义任何方法,是标志接口,说明实现该接口的List支持快速随机访问功能。

标志接口

标志接口是没有任何方法和属性的空接口,仅仅表明它的类属于某种特定类型,用法如下:

if(obj instanceof Cloneable) {………} 

常用的标志接口示例:

  • java.io.Serializable:序列号接口。未实现此接口的类将无法使其任何状态序列化或反序列化.为保证 serialVersionUID
    值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值;
  • java.lang.Cloneable:克隆接口。表明Object.clone()方法可以合法地对该类实例进行按字段复制.实现此接口的类应该使用公共方法重写
    Object.clone(它是受保护的).如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone
    方法,则会导致抛出 CloneNotSupportedException 异常;
  • java.util.RandomAccess:上面说的快速随机访问接口。用来表明其支持快速(通常是固定时间)随机访问.此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能;

java.rmi.Remote:(没接触过)Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口.任何远程对象都必须直接或间接实现此接口.只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用;

实现该接口的List

  • 实现该接口的类有ArrayList, AttributeList, CopyOnWriteArrayList, RoleList,
    RoleUnresolvedList, Stack, Vector。
  • 实现该接口List的特点是支持快速随机访问功能,如ArarryList的get(i)方法
  • 官方还说了,实现该接口的list特点是get(i)的性能优于迭代器遍历

for (int i=0, n=list.size(); i < n; i++)
         list.get(i);
 
runs faster than this loop:
     for (Iterator i=list.iterator(); i.hasNext(); )
         i.next();

源码

package java.util;

/**

  • @since 1.4
    */
    public interface RandomAccess {
    }

参考链接

jdk官网英文介绍
https://docs.oracle.com/javase/8/docs/api/index.html

LinkedList 源码分析 从这个方法的源码可以看出,该方法通过比较索引值与链表 size 的一半大小来确定从链表头还是尾开始遍历。如果索引值小于 size 的一半,就从链表头开始遍历,反之从链表尾开始遍历。这样可以在较短的时间内找到目标节点,充分利用了双向链表的特性来提高效率。仅仅在头尾插入或者删除元素的时候时间复杂度近似 O(1),其他情况增删元素的平均时间复杂度都是 O(n)底层数据结构是链表,内存地址不连续,只能通过指针来定位,不支持随机快速访问,所以不能实现。来代替,并且,性能通常会更好!的遍历的核心就是它的迭代器的实现。 阅读详情

相关推荐

Java编程:RandomAccess接口

RandomAccess 是一个标记接口,标识实现该接口的类支持快速随机访问。 一、随机访问和串行访问 举个例子:在 Java 中,有 ArrayList 和 LinkedList 两种数据类型。 ArrayList 是基于数组实现的,可以通过数组下表灵活的访问列表中的任意元素。像 ArrayList 这种设计,我们就称之为随机访问。 LinkedList 是基于 next 引用实现的,只...

天将降大任于是人 1726

java 的标记接口RandomAccess使用方法

在 Java 中,`RandomAccess` 是一个标记接口(marker interface),用于标识实现该接口的 `List` 实现类支持快速(通常是常数时间复杂度 O(1))的随机访问。常见的实现类包括 `ArrayList`,而不包括 `LinkedList`,因为 `LinkedList` 的随机访问时间复杂度为 O(n)。

爱的叹息的专栏 681

中兴畅行60 ZTE 7552N 深度改造指南:从解锁BL到Magisk Root与IMEI硬改全流程

本文详细介绍了中兴畅行60(ZTE 7552N)的深度改造全流程,包括解锁BL、刷入Magisk获取Root权限以及IMEI硬改等关键步骤。通过专业的操作指南和实用技巧,帮助用户安全完成设备改造,同时提醒注意法律风险和技术难点。

weixin_33670786的博客 1884

RandomAccess接口源码理解

java源码理解。

ewbie的博客 373

手把手教你理解ARM SoC中的PPU:电源管理IP的配置与实战避坑指南

本文深入解析ARM SoC中的PPU(Power Policy Unit)电源管理IP,提供详细的配置指南与实战避坑技巧。从PPU基础架构、寄存器配置到与PCSM的协同工作,全面介绍如何优化电源管理策略,解决常见配置误区,并分享高级调试与性能优化方法,助力工程师提升低功耗SoC设计效率。

weixin_28693447的博客 479

别再手动巡检了!用Zabbix 5.0 + SNMPv2自动监控华为S系列交换机(附完整命令集)

本文详细介绍了如何利用Zabbix 5.0与SNMPv2实现华为S系列交换机的自动化监控,告别低效的手动巡检。通过配置SNMPv2c安全基线、核心功能启用及Zabbix Server端深度配置,构建7×24小时监控体系,实时预警接口状态、流量波动等关键指标,大幅提升运维效率与故障响应速度。

weixin_30940783的博客 628

Java-RandomAccess和Random区别

随机访问接口Java RandomAccess接口是一个标记接口,用于指示实现类可以通过随机访问方式(即可以通过索引位置)来访问其数据。RandomAccess接口没有方法,只是用于标记实现了该接口的类具有随机访问的能力。在Java集合框架中,有一些实现了RandomAccess接口的类,如ArrayList、Vector等。这些类可以通过索引位置直接访问其元素,而不需要遍历整个集合。使用RandomAccess接口的好处是,可以根据需要选择不同的算法和数据结构来实现具有随机访问能力的集合。

架构师之路。。 1409

通信原理期末考试试题及答案

五、(总分12分)设某信道具有均匀的的双边噪声功率谱密度在该信道中传输抑制载波的单边带(上边带)信号,并设调制信号m(t)的频带限制在5K HZ,而载波为100 K HZ,已调信号的功率为10KW。:(1)单边带信号的载频为100kHz,带宽B=5kHz,为使信号顺利通过,理想带通滤波器的中心频率为。8、对最高频率为fH的调制信号m(t)分别进行AM、DSB、SSB调制,相应已调信号的带宽分别为。7、设调制信号为f(t)载波为,则抑制载波双边带调幅信号的时域表达式为,频域表达式为。

qq_67692062的博客 2392

JAVA中RandomAccess接口

RandomAccess接口   RandomAccess是一个标记接口,实现该接口表示支持快速访问。这是一个空接口,没有任何方法。      当实现该接口时,说明支持快速访问。 即: for (int i=0, n=list.size(); i<n; i++) list.get(i); 要比 for (Iterator i=list.iterator(); i.hasNext(); ) i.next(); 访问速度快。 当没有实现该接口时, for (int i=0, n=list.size();

weixin_43120969的博客 435

TMC2209的UART模式详解:如何用串口调试助手配置细分和电流(避坑指南)

本文深入解析TMC2209步进电机驱动器的UART模式,详细讲解如何通过串口调试助手配置细分和电流,包括硬件连接、通信协议、关键寄存器设置及高级功能应用。提供实战避坑指南,帮助开发者优化步进电机控制性能,适用于精密仪器、3D打印等场景。

weixin_29166013的博客 541

YOLO11改进|注意力机制篇|引入MLCA轻量级注意力机制

YOLO11中添加MLCA轻量级注意力机制

A1983Z的博客 4054

LinkedList 分析

/ 如果不是第一次添加,将新节点赋值给l(添加前的最后一个元素)的next。// 如果是就直接调用 linkLast 方法将元素节点插入链表尾部即可。// 定义一个节点元素保存 succ 的 prev 引用,也就是它的前一节点信息。// 如果是第一次添加,将first赋值为新节点,此时链表只有一个元素。// 创建节点,并指定节点前驱为链表尾节点 last,后继引用为空。// 判断前驱节点是否为空,为空表示 succ 是第一个节点。// succ 节点前驱的后继引用指向新节点。

2401_86844317的博客 1247

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1390

源码分析:LinkedList

本文主要介绍LinkedList的内容

AWSDN的博客 1229

python实现Markowitz模型 (附完整源码)

python实现Markowitz模型 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 402

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

开发者必备:LinkedList 源码深度分析与应用指南

LinkedList是一个基于双向链表实现的集合类,经常被拿来和ArrayList做比较。关于LinkedList和ArrayList的详细对比,我们Java 集合常见面试题总结(上)有详细介绍到。双向链表另外,不要下意识地认为LinkedList作为链表就最适合元素增删的场景。我在上面也说了,LinkedList仅仅在头尾插入或者删除元素的时候时间复杂度近似 O(1),其他情况增删元素的平均时间复杂度都是 O(n)。

Yaml4的博客 1237

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LinkedList源码

LinkedList是一个基于双向链表实现的集合类不过,我们在项目中一般是不会使用到LinkedList的,需要用到LinkedList的场景几乎都可以使用ArrayList来代替,并且,性能通常会更好!就连LinkedList的作者约书亚 · 布洛克(Josh Bloch)自己都说从来不会使用LinkedList。另外,不要下意识地认为LinkedList作为链表就最适合元素增删的场景。LinkedList。

埃泽漫笔 910

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Java 总结思考】Java 答疑解惑之集合篇

打破舒适圈,经常对 Java 知识进行总结思考,才能保证自己不掉队。 系统化重学 Java 第二篇,来一起分析下Java 集合中的常见疑问点吧

盛夏温暖流年 683

Java集合面试题最新整理,持续更新

Java集合框架摘要 Java中的容器主要分为Collection和Map两大类。 Collection包括: List:有序可重复,如ArrayList(动态数组)、LinkedList(双向链表)、Vector(线程安全数组)。 Set:无序唯一,如HashSet(哈希表)、TreeSet(红黑树)、LinkedHashSet(链表维护插入顺序)。 Queue:队列结构,如PriorityQueue(堆实现优先队列)。 Map键值对集合: HashMap(数组+链表/红黑树,非线程安全) TreeMap

2401_89221445的博客 539

Java后端开发面经-Java集合

Java后端开发面经-Java集合。

清溪醉客的博客 549

深入ArrayList()源码

ArrayList

weixin_48351326的博客 401

Java RandomAccess源码总结 RandomAccess源码注释翻译和解析中英文对照版

版本 JDK8(JDK1.8) RandomAccess接口源码重点 RandomAccess接口是一个标记接口,用于指示实现该接口的列表支持快速随机访问, 如数组实现的列表就支持快速随机访问,而链表实现的列表就不支持快速随机访问 RandomAccess接口源码 /** * Marker interface used by {@code List} implementations to indicate that * they support fast (generally constant time

weixin_45754452的博客 189

java 中有多少空接口_java中RandomAccess接口明明是个空接口,有什么用呢?

RandomAccess接口一、官方描述首先我们先看一下这个接口在java中是怎么描述的。位置:rt.jar中java.util.RandomAccess/*** Marker interface used by List implementations to indicate that* they support fast (generally constant time) random acc...

weixin_35249165的博客 228

Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口

一、概述 标记接口是一些没有属性和方法的接口,也是一种设计思想。Java中的一个标记接口表示的的是一种类的特性,实现了该标记接口的类则具有该特性。如实现了Serializable接口的类,表示这个类的对象是可以进行序列化和反序列化的。Java中常见的标记接口还有Cloneable接口、RandomAccess接口和Remote接口。可以用 if(对象名 instance...

weixin_30907935的博客 260
上一篇: Java集合简介
下一篇: ArrayList源码之6260652 bug号
ludkjava
博客等级 码龄11年 173粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值