首页 > 其他分享 >ArrayList 扩容规则和 fail-fast 和fail-sale

ArrayList 扩容规则和 fail-fast 和fail-sale

时间:2024-01-30 15:24:33浏览次数:28  
标签:遍历 ArrayList sale fast 修改 数组 fail

初始长度为0数组

ArrayList()会使用长度为0的数组

ArrayList(int initalCapacity) 会使用自定容器的数组

 

如果初始不是0

add()首次扩容为10,再次扩容为1.5倍

addAll()会在元素与下次扩容1.5倍选最大值

 

Iterator (迭代器)

遍历集合

遍历set集合,遍历list 集合,编辑map集合

fail -fast 遍历同时有其他人修改 抛出异常(并发修改异常)

modCount 记录修改几次,调用迭代器的next() 是否还有下个元素,

MOdCouent(遍历时的记录数) 和expectedModCount (记录循环开始时的修改次数)

modCount 和expendmod Count 是否一样

 

fail -salf 发现遍历同时其他人修改,牺牲写一致性能,允许修改

copyOnwirteArratList<Student> 允许修改

开始记录数组snapshot 初始化记录。

遍历时旧数组

添加新数组:copyOf扩容加1,

最后将新的给旧的。

fail-fast 与fast -saft 典型代表

ArrayList 是fail-fast 的典型代表,不能边修改边遍历,否则抛出异常,

有个初始化expectedCount记录数组长度 modCount 遍历时记录数

CopyonWriteArrayList 是fail-sale 代表,旧数组遍历 ,getArray得到旧数组元素

array.copy复制新数组 扩容加一,新加元素加载新数组元素的最后一个元素。

 

ArrayLiist

arrayList 不能修改,尽快失败

copyonWirteArrayList 是fail -safe 典型代表,原理是读写分离

 

 

 

标签:遍历,ArrayList,sale,fast,修改,数组,fail
From: https://www.cnblogs.com/zyb-luckey/p/17997183

相关文章

  • 31-ArrayList和HashMap集合的排序
     扩展:在List集合中添加另一个集合时,一般常用两种方法booleanadd(Ee): 将list作为一个元素添加到集合中booleanaddAll(Collection<?extends E> c):把list中的所有元素添加到集合中 ArrayList类的排序方法(常用)packagelist;importjava.util.ArrayList......
  • CentOS启动nginx出现nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: N
    问题:1.进入sbin:cd/usr/local/nginx/sbin/2.启动nginx:./nginx3.出现问题:nginx:[emerg]open()"/var/run/nginx/nginx.pid"failed(2:Nosuchfileordirectory) 原因:没有nginx文件夹,且其下没有nginx.pid文件。 解决办法:创建文件1.进入run下:cd/var/run2.创建nginx......
  • "command failed" err="failed to run Kubelet: validate service connection: valida
    场景:更换版本1.18.0为1.26.0启动kubelet报错,""commandfailed"err="failedtorunKubelet:validateserviceconnection:validateCRIv1runtimeAPIforendpoint\"unix:///run/containerd/containerd.sock\":rpcerror:code=Unimplement......
  • Failed to run the WC DB work queue associated with 错误的解决
    svncheckout代码是出现如标题的错误,提示我cleanup,cleanup失败,于是网上搜到了这一cleanup失败的解决方法,cleanup后再进入代码update就可以了svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了。解决方法:清空svn的队列1.下载 sqlite3  2.找到你项目......
  • Windows安装MySql时出现“Failed to find valid data directory”的错误
    1、......
  • 测试 TIDB in k8s 一次问题记录(pd failed to respond)
    作者:WalterWj问题背景单机装了个k8s,TIDB部署启动的时候看报错好像是tikv访问不到pd。但是通过tikvpodcurlpd端口是通的(404代表通,但是API不存在)。而且可以看到本地目录pd是预期产生文件了的。登录pdpod,执行pd-ctl也是正常执行。member命令下有内容解决方法......
  • k8s集群断电后 机器不能启动问题--- Centos 服务器 无法启动 Failed to start Login S
    参考文档:https://blog.csdn.net/hedao0515/article/details/129718094先说下主要原因,是因为断电后有些文件没有完整写入,导致文件系统错误,需要借助原生工具修复文件系统。重启机器,进入linux选择内核页面,按ctrl+x进入引导页面,在linux16这一行最后填上init=/bin/bash有可能......
  • 深入了解Java中的ArrayList
    Java中的ArrayList是一个常用的动态数组类,它提供了便捷的操作方法和灵活的大小调整能力。在本篇博客中,我们将深入了解ArrayList的特性、常见用法和一些注意事项。ArrayList概述:ArrayList是Java集合框架中的一个类,它实现了List接口,并继承了AbstractList类。它基于数组实现,可以动......
  • ABC338 F Negative Traveling Salesman 题解
    QuestionABC338FNegativeTravelingSalesman给出一个\(N\)个点\(M\)条边的有向图,边权可能为负数,但不可能有负环每经过一条边就要加上这条边的代价求,一条路径经过所有的点,并且要求总代价最小Solution观察到\(N\le20\)自然而然想到状压因为多次经过一条边的代价是......
  • Salesforce 通过 Flow 调用外部接口
    1接口设置1.1被调用的接口调用外部接口需要先搭建好可以外网访问的WebAPI,我使用的是.NET6搭建的WebAPI,并开启了Swagger(用于将接口导入到Salesforce).1.2Salesforce接口鉴权设置在设置->安全性->远程站点设置里添加接口的地址,有端口就需要带上端口号.......