![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础回顾
文章平均质量分 74
windcake
春风亲吻我像蛋挞
展开
-
LRUCache的实现原理
简介LRU(Least Recently Used)最近最少使用,最近有时间和空间最近的歧义,所以我更喜欢叫它近期最少使用算法。它的核心思想是,如果一个数据被访问过,我们有理由相信它在将来被访问的概率就越高。于是当LRU缓存达到设定的最大值时将缓存中近期最少使用的对象移除。LRUCache内部使用LinkedHashMap来存储key-value键值对,并将LinkedHashMap设置为访问顺序来原创 2017-02-06 14:57:30 · 2600 阅读 · 0 评论 -
ArrayList是如何组织数据的
ArrayList简介ArrayList是我们十分常用的一个类,它的底层是由数组实现。不同于基本数组的是,它的容量能自动增长。数据结构如上所述,ArrayList其实是对数组的包装,无论是add方法,亦或是remove,都是操作一个全局的数组。 这个全局数组定义如下Object[] array;JAVA中所有所有对象都继承自Object,所以array可以装下所有对象。初始化要把刚刚声明的arra原创 2016-12-19 21:25:18 · 626 阅读 · 0 评论 -
LinkedList源码分析
LinkedList简介LinkedList是List接口的一种实现,底层数据结构基于双向链表。除了List接口,它还实现了Queue和Deque接口。可能是因为以上特点,在代码的注释中才出现了这样饶有意味的嘱托。This class is primarily useful if you need queue-like behavior. It may also be useful as a lis原创 2016-12-21 21:01:10 · 269 阅读 · 0 评论 -
HashMap是如何组织数据的
HashMap简介HashMap存储数据采用了key-value形式,采用数组存储key的HashCode,来实现对数据的存储,这样每提供一个key就能知道它在数组中的位置,而不用像ArrayList一样去遍历。但是不同的key算出的HashCode在一个很小的概率上可能相同,即发生了Hash冲突。HashMap采用了链表法来解决这个冲突。所以HashMap的底层数据结构是数组加链表,链表是单链表。原创 2016-12-23 10:29:33 · 412 阅读 · 0 评论 -
LinkedHashMap是如何组织数据的
内部是基于双向循环链表,也就是数组+双向链表 如果有三个参数的构造器的第三个参数为true,那么其内部顺序就是访问顺序。 put和get都会影响这个顺序对链表进行最近最远算法的实现,其实是自相矛盾的。 因为链表的存在是为了解决冲突,HashMap为了保证存取的速度是不希望存在冲突的。 而LRU又依赖这个冲突。header放在哪个table里? 还是每个table里都有一个header?p原创 2016-12-29 20:42:58 · 344 阅读 · 0 评论 -
常见GC算法
在C/C++中是由程序员自己去申请、管理和释放内存的,因此没有GC的概念。而在Java中,专门有一个用于垃圾回收的后台线程来进行监控、扫描,自动将一些无用的内存进行释放。下面介绍几种常见的GC算法。引用计数法 Reference Counting给对象添加一个引用计数器,每过一个引用计数器值就+1,少一个引用就-1。当它的引用变为0时,该对象就不能再被使用。它的实现简单,但是不能解决互相循环引用的问原创 2017-02-01 19:26:11 · 7173 阅读 · 0 评论 -
JAVA中的四种Reference
简介在JAVA中我们平时使用的引用方式叫做强引用。其实在JAVA.Lang.ref包下还定义了SoftReference、WeakReference和PhantomReference三种引用。这几种引用依次减弱这个“弱”指的是,当GC来的时候,它更容易被回收。可达性定义为了正确的理解和使用这三种引用,理解他们的可达性非常重要。强可达:从根节点,至少有一个强引用路径可达。并且没有其他三种引用。 软可原创 2017-02-02 20:54:37 · 405 阅读 · 0 评论 -
WeakHashMap的Weak原理
WeakHashMap简介不同于HashMap的是,WeakHashMap的key是弱引用,当key是弱可达的时候,在GC时这条数据就被移除了。弱的key被移除之后,它就会被VM放到ReferenceQueue里,我们就可以通过Queue的poll方法把key拿出来,并找到key对应的Entry,然后把这个Entry从Map中移除掉,从而真正达到清除内存的目的。WeakHashMap的数据结构Wea原创 2017-02-03 09:38:11 · 544 阅读 · 0 评论