Java基础
文章平均质量分 90
CrazyJack123
这个作者很懒,什么都没留下…
展开
-
LinkedHashMap、LinkedHashSet源码学习笔记
一、LinkedHashMap概述理解LinkedHashMap的关键点在于清楚HashMap的迭代并没有顺序,LinkedHashMap利用了一个额外的双向链表来维护一个特定的迭代顺序,而存储键值和HashMap一样用的散列表作为数据结构。HashMap的遍历得到的key并不是有特定顺序的。稍微回顾一下keySet方法如何获得key的集合: public Set<K> keySet() {原创 2016-12-14 17:24:47 · 514 阅读 · 0 评论 -
ArrayList、LinkedList学习笔记
ArrayList和LinkedList学习笔记一、ArrayList概述ArrayList实现List接口,底层用数组保存元素。元素数量趋向容量时,数组容量会动态增长,此时会带来数据的拷贝,允许包括null元素。线程不安全,如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式原创 2016-12-09 22:36:27 · 475 阅读 · 0 评论 -
HashMap、HashSet、Hashtable源码学习笔记
一、HashMap概述理解HashMap的关键是知道其底层使用拉链表作为数据结构存储数据的,所有的存储、读取、遍历等操作都是建立在这种数据结构之上。理解了这种数据结构时候会对源码的学习有很大帮助。HashMap线程不安全,可以存储null键和null值。数据结构理解HashMap的底层数据结构基本上可以帮助我们理解其所有的方法。我们看到HashMap的内部有一个Node[] table成员,接着我们原创 2016-12-12 21:59:49 · 428 阅读 · 0 评论 -
单例模式学习笔记
难道不能使用Java的静态变量来达到目的吗?是的,用静态变量有这样一个缺点,如果将对象赋值给一个静态变量,那么你必须在程序一开始就创建好对象,万一对象非常消耗资源,而程序在某次执行中又一直没用到,就形成了浪费。 如果是一个公开类,我们可以多次实例化它;如果不是公开类, 只有同一个包内的类可以实例化它,也依然可以实例化它多次。于是我们想到将类的构造器私有化,这样类内的代码是唯一能调用此构造器的代码:原创 2016-11-17 17:41:58 · 495 阅读 · 0 评论 -
深入理解Java内存模型(二)——重排序
原文链接数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量。 读后写 a = b;b = 1; 读一个变量之后,再写这个变量。转载 2017-01-24 21:35:56 · 342 阅读 · 0 评论 -
BlockingQueue浅析
概述concurrent包中,BlockingQueue不光实现了一个完整队列所具有的基本功能,同时在多线程环境下,他还自动管理了多线间的自动等待于唤醒功能,从而使得程序员可以忽略这些细节,关注更高级的功能。 生产者线程向队列插入元素,消费者线程则取出它们,使用队列,可以优雅地从一个线程向另一个线程传递数据。BlockingQueue常用方法 方法 正常动作 特殊情况下动作 put原创 2017-03-18 19:47:27 · 509 阅读 · 0 评论