自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

转载 给jdk写注释系列之jdk1.6容器(13)-总结篇之Java集合与数据结构

是的,这篇blogs是一个总结篇,最开始的时候我提到过,对于java容器或集合的学习也可以看做是对数据结构的学习与应用。在前面我们分析了很多的java容器,也接触了好多种常用的数据结构,今天我们就来总结下这些内容。 下面我们以数据结构的维度来总结下,在Java集合的实现过程中,底层到底使用了哪些常用的数据结构中,他们分别又有什么特点。 1. ...

2016-01-17 23:46:00 129

转载 给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析

  PriorityQueue是一种什么样的容器呢?看过前面的几个jdk容器分析的话,看到Queue这个单词你一定会,哦~这是一种队列。是的,PriorityQueue是一种队列,但是它又是一种什么样的队列呢?它具有着什么样的特点呢?它的底层实现方式又是怎么样的呢?我们一起来看一下。 PriorityQueue其实是一个优先队列,什么是优先队列呢?这和我们前面讲的先进先出(F...

2016-01-12 23:19:00 160

转载 给jdk写注释系列之jdk1.6容器(11)-Queue之ArrayDeque源码解析

  前面讲了Stack是一种先进后出的数据结构:栈,那么对应的Queue是一种先进先出(First In First Out)的数据结构:队列。 对比一下Stack,Queue是一种先进先出的容器,它有两个口,从一个口放入元素,从另一个口获取元素。如果把栈比作一个木桶,那么队列就是一个管道。  是不是很容易理解,因为队列有两个口,一个负责入队另一个负责出队,所以会...

2016-01-08 09:59:00 130

转载 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析

  前面我们已经接触过几种数据结构了,有数组、链表、Hash表、红黑树(二叉查询树),今天再来看另外一种数据结构:栈。 什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶,我们往木桶里放东西,往外拿东西时会发现,我们最开始放的东西在最底部,最先拿出来的是刚刚放进去的。所以,栈就是这么一种先进后出( First InLast Out,或者叫后进先出) ...

2016-01-05 23:21:00 115

转载 给jdk写注释系列之jdk1.6容器(9)-Strategy设计模式之Comparable&Comparator接口

  前面我们说TreeMap和TreeSet都是有顺序的集合,而顺序的维持是要靠一个比较器Comparator或者map的key实现Comparable接口。 既然说到排序,首先我们不用去关心什么是Strategy设计模式,也不用关心它为了解决什么问题而存在,我们直接从排序开始看。1.排序 假设我们有一个int数组需要排序,想一想应该怎么实现,当然...

2015-12-30 23:35:00 136

转载 给jdk写注释系列之jdk1.6容器(8)-TreeSet&NavigableMap&NavigableSet源码解析

  TreeSet是一个有序的Set集合。  既然是有序,那么它是靠什么来维持顺序的呢,回忆一下TreeMap中是怎么比较两个key大小的,是通过一个比较器Comparator对不对,不过遗憾的是,今天仍然不会讲Comparator,但是需要明白的是TreeSet要实现信息也必须依靠于Comparator接口。 关于Set,在前面我们讲过一个HashSet,是不是想起了什...

2015-12-28 23:27:00 123

转载 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析

  TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解。 要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链表,Hash表等树这种结构又有什么优点。1.二叉查询树、红黑树介绍   以下为个人理解,有误请拍砖。。。下面我尽可能用通俗易懂的语言,简单总...

2015-12-27 23:45:00 122

转载 给jdk写注释系列之jdk1.6容器(6)-HashSet源码解析&Map迭代器

  今天的主角是HashSet,Set是什么东东,当然也是一种java容器了。现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下HashMap了),需要在啰嗦一句的是hash表是基于快速存取的角度设计的,也是一种典型的空间换时间的做法(这个在分析HashMap中都有讲过)。那么今天的HashSet它又是怎么一回事的,...

2015-12-21 17:16:00 157

转载 给jdk写注释系列之jdk1.6容器(5)-LinkedHashMap源码解析

  前面分析了HashMap的实现,我们知道其底层数据存储是一个hash表(数组+单向链表)。接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持了一个双向链表(hash表+双向链表),在遍历的时候可以使用插入顺序(先进先出,类似于FIFO),或者是最近最少使用(LRU)的顺序。 来具体看下LinkedHashMap的...

2015-12-19 19:05:00 118

转载 给jdk写注释系列之jdk1.6容器(4)-HashMap源码解析

  前面了解了jdk容器中的两种List,回忆一下怎么从list中取值(也就是做查询),是通过index索引位置对不对,由于存入list的元素时安装插入顺序存储的,所以index索引也就是插入的次序。  Map呢是这样一种容器,它可以存储两个元素键和值,根据键这个关键字可以明确且唯一的查出一个值,这个过程很像查字典,考虑一下使用什么样的数据结构才能实现这种效果呢?1.自己实...

2015-12-17 20:58:00 108

转载 给jdk写注释系列之jdk1.6容器(3)-Iterator设计模式

  前面讲了两种List,一种基于数组实现的ArrayList,一种基于链表实现的LinkedList,这两种list是我们工作中最常用到的List容器。当然数组和链表也是两种常见的基本数据结构,其他基本数据结构还有堆栈、队列、树等,对java容器的学习,也可以看做是对数据结构的学习和使用。 在ArrayList和LinkedList的分析中,都没有对容器遍历进行分析,...

2015-12-15 20:08:00 91

转载 给jdk写注释系列之jdk1.6容器(2)-LinkedList源码解析

LinkedList是基于链表结构的一种List,在分析LinkedList源码前有必要对链表结构进行说明。1.链表的概念链表是由一系列非连续的节点组成的存储结构,简单分下类的话,链表又分为单向链表和双向链表,而单向/双向链表又可以分为循环链表和非循环链表,下面简单就这四种链表进行图解说明。 1.1.单向链表 单向链表...

2015-12-14 22:59:00 139

转载 给jdk写注释系列之jdk1.6容器(1)-ArrayList源码解析

  工作中经常听到别人讲“容器”,各种各样的容器,话说到底什么是容器,通俗的讲“容器就是用来装东西的器皿,比如:水桶就是用来盛水的,水桶就是一个容器。”ok,在我们写程序的时候常常要对大量的对象进行管理,比如查询,遍历,修改等。jdk为我们提供的容器位于java.util包,也是我们平时用的最多的包之一。但是为什么不用数组(其实也不是不用,只是不直接用)呢,因为数组的长度需要提前...

2015-12-12 23:38:00 79

转载 条件阻塞Condition的应用

Condition的功能类似在传统线程技术中的Object.wait和Object.notity的功能。例子:生产者与消费者 1 import java.util.Random; 2 import java.util.concurrent.ExecutorService; 3 import java.util.concurrent.Executors...

2015-12-11 21:17:00 100

转载 读写锁ReadWriteLock和缓存实例

读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥。即:读的时候不允许写,写的时候不允许读,可以同时读。 synchronized关键字和普通的Lock构造的锁,会造成读与读之间的互斥,因此读写锁可提高性能。例子1:三个线程同时对一个共享数据进行读写。 1 import java.util.Random; 2 import java.uti...

2015-12-11 21:15:00 101

转载 使用CompletionService结合ExecutorService批处理任务

CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果。为此你可以将每个任务的Future保存进一个集合,然后循环这个集合调用Future的get()取出数据。幸运的是CompletionService帮你做了这件事情。...

2015-12-08 22:48:00 134

转载 Callable、Future和FutureTask使用说明

普通的创建线程,一种是直接继承Thread,另外一种就是实现Runnable接口。但是这两种都无法在执行完任务之后获取执行结果,Callable、Future就提供了这样的便利。Future的方法说明:booleancancel(booleanmayInterruptIfRunning);cancel方法用来取消任务,如果取消任务成功则返回tru...

2015-12-08 22:46:00 50

转载 WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】

一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种...

2015-12-08 14:26:00 103

转载 jvm内存模型及分配参数

jvm内存模型程序计数器:是一块很小的内存空间。当线程数量超过cpu数量时,线程之间根据时间片轮询抢夺cpu资源。每一个线程都必须用一个独立的程序计数器,用于记录下一条要运行的指令。java虚拟机栈(线程栈 ):也是线程私有内存空间,他和java线程在同一时间创建,他保存方法的局部变量、部分结果,并参与方法的调用和返回。如果线程在计算过程中,请求的栈深度大于最大可用的栈深度,...

2015-12-07 17:23:00 90

转载 CyclicBarrier 使用说明

字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。主要方法:public int await() throws InterruptedException, BrokenBarrierException用来挂起当前线程,直至所有线程都到达barri...

2015-11-27 10:12:00 76

转载 semaphore(信号量)使用说明

例子:以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入一辆,如果又离开两辆,则又可以放入两辆,如此往复。在这个停车场系统中,车位是公共资源...

2015-11-27 10:11:00 96

转载 CountDownLatch(倒计时计数器)使用说明

方法说明:public void countDown() 递减锁存器的计数,如果计数到达零,则释放所有等待的线程。如果当前计数大于零,则将计数减少。如果新的计数为零,出于线程调度目的,将重新启用所有的等待线程。 如果当前计数等于零,则不发生任何操作。public boolean await(long timeout, TimeUnit unit)th...

2015-11-23 11:47:00 198

转载 linux常用命令

1. 可以使用一下命令查使用内存最多的10个进程ps -aux | sort -k4nr | head -n 102. 可以使用一下命令查使用CPU最多的10个进程ps -aux | sort -k3nr | head -n 103. 更改文件用户组和用户chown -r admin.admin /xxx4. 更改用户权限ch...

2015-11-22 13:39:00 60

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除