当前位置: 首页 > news >正文

集合学习

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

MAP:

HashMap/ConcurrentHashMap

Hashtable

LinkedHashMap

TreeMap/ConcurrentSkipListMap(跳表实现)

 

IdentityHashMap,key只有严格 == 时才算相同,put相同的key才会覆盖,而不是相等时覆盖

EnumMap,Enum做为key,并且会根据key的自然顺序保存

WeakHashMap,key没有强引用时会被GC回收,健值都被从map中删除

WeakHashMap:

WeakReference是“弱键”实现的哈希表。它这个“弱键”的目的就是:实现对“键值对”的动态回收。当“弱键”不再被使用到时,GC会回收它,WeakReference也会将“弱键”对应的键值对删除。

 “弱键”是一个“弱引用(WeakReference)”,在Java中,WeakReference和ReferenceQueue 是联合使用的。在WeakHashMap中亦是如此:如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。 接着,WeakHashMap会根据“引用队列”,来删除“WeakHashMap中已被GC回收的‘弱键’对应的键值对”。
    另外,理解上面思想的重点是通过 expungeStaleEntries() 函数去理解。

https://www.cnblogs.com/skywang12345/p/3311092.html

 

http://www.cnblogs.com/kersen0815/p/5325434.html

 

LinkedHashMap

LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。

LinkedHashMap可以用来实现LRU (Least recently used, 最近最少使用)算法。

    实现时需要做两点:

    1.调用该构造方法并将accessOrder置为true,当accessOrder为true时,get方法和put方法都会调用recordAccess方法使得最近使用的Entry移到双向链表的末尾;

    2.覆盖方法removeEldestEntry,当put新元素当时候,此方法用来判断时map扩容还是LRU淘汰。应该处理成if(size() > maxSize) return true;

http://blog.csdn.net/justloveyou_/article/details/71713781

 

put操作时 将新增的节点,连接在链表的尾部

在执行get,put,remove方法后分别回调了HashMap为其预留的方法(覆盖)

void afterNodeAccess(Node<K,V> p) { }

void afterNodeInsertion(boolean evict) { }

void afterNodeRemoval(Node<K,V> p) { }

在这些方法里处理链表变化。

https://blog.csdn.net/zxt0601/article/details/77429150

 

Java堆结构PriorityQueue完全解析

PriorityQueue

优先队列, 逻辑结构是一棵完全二叉树(根结点存储最小值),存储结构其实是一个数组。

逻辑结构层次遍历的结果刚好是一个数组,从小到大。

PriorityQueue默认是一个小顶堆,然而可以通过传入自定义的Comparator函数来实现大顶堆:

PriorityQueue< Integer > queue = new PriorityQueue < Integer > (26, Collections.reverseOrder());

https://blog.csdn.net/u013309870/article/details/71189189

https://blog.csdn.net/kobejayandy/article/details/46832797

Java 集合系列目录

http://www.cnblogs.com/skywang12345/p/3323085.html

 

java.util.BitSet 位操作,set(N):将N位设置true

转载于:https://my.oschina.net/u/3705388/blog/1601336

相关文章:

  • [SSL: CERTIFICATE_VERIFY_FAILED] Certificate Verif
  • 单调、加班、血汗工厂,被夸大的富士康背后真相到底是什么?
  • MySQL主从配置
  • 属性动画
  • 部署redis cluster
  • 你知道升级 tomcat 8.5.x后cookie有什么变化吗?
  • kaggle之数据分析从业者用户画像分析
  • 如何添加自定义脚本到开机自启动
  • Linux学习之路-Linux-循环 for、while【10】---20171223
  • 函数式 Java 到函数式 Kotlin 的转换
  • 23.2. 基础操作
  • Kubernetes系统架构简介[转]
  • Jenkins+Jmeter持续集成笔记(三:集成到Jenkins)
  • [译]使用 Siesta 处理 Swift 网络请求
  • 33.3. nanomsg
  • python3.6+scrapy+mysql 爬虫实战
  • const let
  • PhantomJS 安装
  • Sass 快速入门教程
  • spring + angular 实现导出excel
  • Vue.js 移动端适配之 vw 解决方案
  • webpack项目中使用grunt监听文件变动自动打包编译
  • web标准化(下)
  • 从伪并行的 Python 多线程说起
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于 Babel 的 npm 包最小化设置
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 来,膜拜下android roadmap,强大的执行力
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 微信公众号开发小记——5.python微信红包
  • 小程序 setData 学问多
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • Semaphore
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (多级缓存)多级缓存
  • (分布式缓存)Redis持久化
  • (论文阅读40-45)图像描述1
  • (三)模仿学习-Action数据的模仿
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***详解账号泄露:全球约1亿用户已泄露
  • .gitignore文件设置了忽略但不生效
  • .mysql secret在哪_MySQL如何使用索引
  • .Net7 环境安装配置
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @Builder用法
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C#][DevPress]事件委托的使用
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [java] 23种设计模式之责任链模式
  • [JavaEE] 线程与进程的区别详解