JDK1.8 重识HashMap】的更多相关文章

摘要 JDK1.8相较于1.7对HashMap做了很大的优化,比如加入了新数据结构红黑树.Hash算法的优化和扩容的优化. 本篇结合这些区别,探索HashMap的结构实现和功能原理. 存储结构-字段 从数据结构来看,HashMap是数组+链表+红黑树实现的,如图所示: HashMap中重要的几个属性(JDK 1.8): static final int MAXIMUM_CAPACITY = 1 << 30; // 所能容纳的Node极限数量 static final float DEFAULT…
一.JDK1.7中HashMap扩容死锁问题 我们首先来看一下JDK1.7中put方法的源码 我们打开addEntry方法如下,它会判断数组当前容量是否已经超过的阈值,例如假设当前的数组容量是16,加载因子为0.75,即超过了12,并且刚好要插入的索引处有元素,这时候就需要进行扩容操作,可以看到resize扩容大小是原数组的两倍,仍然符合数组的长度是2的指数次幂 我们再进入resize方法如下,它首先会对之前的数组容量进行判断,看是否已经达到了数组最大容量,如果没有,后面会进行数组的转移操作,即…
加号界面(发布模块) 一.点击加号modal出发布模块,创建控件,布局控件1)使用xib加载view,如果在viewDidLoad创建控件并设置frame 那么self.view 的宽高 拿到的是xib的大小 2)如果在viewDidLayouSubviews布局子控件 那么self.view 的宽高 拿到的是屏幕的宽高(这里不推荐 最好在设置frame时 直接用屏幕宽高设置frame) 3)创建按钮,自定义按钮,布局按钮 - (instancetype)initWithFrame:(CGRec…
这一篇是接着上一篇写的, 上一篇的地址是:基于JDK1.8版本的hashmap源码分析(一)     /**     * 返回boolean类型的值,当集合中包含key的键值,就返回true,否则就返回false:和get(key)方法调用的是同一个底层实现方法getNode()     */ public boolean containsKey(Object key) { return getNode(hash(key), key) != null; } /** *这个方法主要是实现在map中…
重识linux-SSH中的SFTP 1 SFTP也是使用SSH的通道(port 22) 2 SFTP是linux系统自带的功能 3 连接上主流的ftp软件都支持sftp协议 比如flashfxp,filezilla都支持 主要因为: 一.可以不用额外安装任何服务器端程序(我比较中意这个,很多公司为了安全性Linux没有外网环境,只有SSH的时候,想传输文件是很悲催的问题). 二.会更省系统资源. 三.SFTP使用加密传输认证信息和传输数据,相对来说会更安全. 四.也不需要单独配置,对新手来说比较…
重识linux-linux系统服务相关 1 tcp wrappers 特殊功能  应用级防火墙 2 系统开启的服务查看 top,ps 命令 3 查看系统启动的服务 1) 找到目前系统开启的网络服务 netstat -tulp 2) 找出所有的有监听网络的服务 netstat -lnp 4  设置开机后立即启动服务的方法 chkconfig 管理系统服务默认开机启动与否 1)设置httpd服务,开机立即启动 chkconfig httpd on 2) 设置httpd服务,关闭开机启动 chkcon…
重识linux-守护进程,系统服务,daemons 1分类 分为 单独的守护进程 和超级守护进程 2命名 服务的名称被创建之后,被挂上linux使用,通常在服务的名称之后会加上一个d,例如at和cron这个两个服务, 他们的程序文件名会被取为atd与crond  这个 d就是daemons 3 启动脚本与启动方式 1)启动脚本放置处  /etc/init.d/* 2) 各服务的初始化环境配置文件  /etc/sysconfig/* 3) super daemon 配置文件   /etc/xine…
重识linux-常见压缩和解压缩命令 1 compress 目前已经很少使用,知道有个  不重点学习 2 gzip和zcat 目前应用最广泛 gzip [-cdtv#] 文件名 zcat 文件名.gz .txt 如上进行压缩 zcat命令 读取压缩后的gz里面的内容 .gz 3 bzip2,bzcat  bzip2提供了更好的压缩比 用法和gzip类似 bzip2 [-cdkzv#] 文件名 bzcat 文件名.bz2 4 重点介绍打包命令 tar 之前的压缩命令大多只能针对单个文件, 但是打包…
重识linux-关于selinux 1 selinux是一个内核模块,有美国国家安全局研发,主要在基因redhat分支的系统上实现,当初的设计是未了避免用户资源的误用, 而SELINUX使用的是MAC委任访问设置. 2 在selinux的运行中,重点在于主体进程能否访问目标文件资源,这中间牵涉到策略内的规则,以及实际的安全上下文类型. 3 selinux的模式有,enforcing,permissive,disabled三种,而启动的策略主要是targeted 4 selinux启动与关闭的配置…
重识linux-循环执行的例行性工作调度 1 用户的设置 1)/etc/cron.allow  可以使用的账号,在这个文件内 2)/etc/cron.deny 不可以的放在这个文件里面 allow的优先级比deny的高,一般只使用1个 2 使用 crontab -e 每行是一个工作编辑 1) * mail kiki < /home.lover.txt 数字范围 0-59 分钟    0-23 小时 1-31 日期 1-12 月份 0-7 周几 命令 特殊字符  * 表示任何都接受  /n 表示每…