
java 集合
Coding-lover
Keep hungry,Keep foolish(可通过微信联系我:unilay_yang)
展开
-
java 小议Iterator
在AbstractList中还有一个内部类Itr,Itr implements Iterator,Itr是一个List遍历的工具类,当然list.iterator()方法也是返回Itr对象,在Itr中有一个校验位属性expectedModCount,对于一个Itr对象,其初始时expectedModCount=modCount。 【注】在AbstractList中,有一个属性modCount,这个转载 2015-07-15 16:13:07 · 703 阅读 · 0 评论 -
java 集合Map架构
概要前面,我们已经系统的对List进行了学习。接下来,我们先学习Map,然后再学习Set;因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Map架构。如上图:(01) Map 是映射接口,Map中存储的内容是键值对(key-value)。(02) Abs转载 2015-04-05 20:33:32 · 790 阅读 · 0 评论 -
java ArrayBlockingQueue
ArrayBlockingQueue介绍ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源转载 2015-04-02 23:48:41 · 2321 阅读 · 0 评论 -
java Copy-On-Write容器
Copy-On-Write简介Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容,然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayLis转载 2014-12-21 13:01:58 · 806 阅读 · 0 评论 -
java BlockingQueue
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所转载 2015-04-02 22:37:16 · 829 阅读 · 0 评论 -
java ConcurrentSkipListMap原理分析及源码解析
一、前言concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点:ConcurrentSkipListMap 的key是有序的。Co转载 2015-04-02 00:38:19 · 3954 阅读 · 3 评论 -
java ThreadLocal(应用场景及使用方式及原理)
Thread.java源码中:ThreadLocal.ThreadLocalMap threadLocals = null;即:每个Thread对象都有一个ThreadLocal.ThreadLocalMap成员变量,ThreadLocal.ThreadLocalMap是一个ThreadLocal类的静态内部类(如下所示),所以Thread类可以进行引用.static class Th转载 2014-07-30 10:15:12 · 20402 阅读 · 1 评论 -
java ClassLoader加载资源
加载资源可以用绝对路径和相对路径,但都有局限性。用硬编码的方式不好。 比较好的方式是绝对+相对方式。即绝对路径就是应用程序安装的路径,相对路径是资源文件相对于程序根目录的路径。 java.lang.ClassLoader不仅可以加载类到内存中,还可以加载其它的资源。 1. ClassLoader.getResourceAsStream 比方说配置文件,很多时候都是放转载 2014-12-10 21:52:45 · 729 阅读 · 0 评论 -
java Thread源码分析
1、Runnable接口源码:转载 2014-08-03 22:12:04 · 1006 阅读 · 0 评论 -
java 理解Java ClassLoader机制
当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader | extension classloader | system classloaderbootstrap classloader -引导(转载 2014-11-03 00:18:43 · 860 阅读 · 0 评论 -
java7 switch语句使用字符串
在jdk1.7中switch语句可以支持String类型的参数,实际上,这个新特性是在编译器这个层次上实现的。而在 Java 虚拟机和字节代码这个层次上,还是只支持在 switch 语句中使用与整数类型兼容的类型。这么做的目的是为了减少这个特性所影响的范围,以降低实现的代价。在编译器层次实现的含义是,虽然开发人员在 Java 源代码的 switch 语句中使用了字符串类型,但是在编译的过程中,转载 2015-01-24 10:16:25 · 1606 阅读 · 0 评论 -
android 从源代码分析Android-Universal-Image-Loader的缓存处理机制
讲到缓存,平时流水线上的码农一定觉得这是一个高大上的东西。看过网上各种讲缓存原理的文章,总感觉那些文章讲的就是玩具,能用吗?这次我将带你一起看过UIL这个国内外大牛都追捧的图片缓存类库的缓存处理机制。看了UIL中的缓存实现,才发现其实这个东西不难,没有太多的进程调度,没有各种内存读取控制机制、没有各种异常处理。反正UIL中不单代码写的简单,连处理都简单。但是这个类库这么好用,又有这么多人用,那么非转载 2014-12-17 20:37:33 · 697 阅读 · 0 评论 -
Java 集合fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
1 fail-fast简介fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fa转载 2015-04-05 20:57:10 · 1429 阅读 · 0 评论 -
java LinkedBlockingQueue
LinkedBlockingQueue介绍LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO(先进先出)排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。此外,LinkedBlockingQueue还是可选容量的(防止过度膨胀)转载 2015-04-05 01:44:47 · 3147 阅读 · 0 评论 -
java HashMap两种遍历方式的深入研究
HashMap的遍历有两种方式,如下所示: 第一种利用entrySet的方式:Map map = new HashMap();Iterator iter = map.entrySet().iterator();while (iter.hasNext()) {Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.get转载 2015-07-15 15:18:19 · 690 阅读 · 0 评论 -
java ArrayList循环遍历并删除元素的常见陷阱
在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出bug。不妨把这个问题当做一道面试题目,我想一定能难道不少的人。今天就给大家说一下在ArrayList循环遍历并删除元素的问题。首先请看下面的例子:import java.util.ArrayList;public class ArrayListRemove { public static vo转载 2015-07-13 14:42:01 · 5110 阅读 · 0 评论 -
java 慎用ArrayList的contains方法,使用HashSet的contains方法代替
在启动一个应用的时候,发现其中有一处数据加载要数分钟,刚开始以为是需要load的数据比较多的缘故,查了一下数据库有6条左右,但是单独写了一个数据读取的方法,将这6万多条全部读过来,却只需要不到10秒钟,就觉得这里面肯定有问题,于是仔细看其中的逻辑,其中有一段数据去重的逻辑,就是记录中存在某几个字段相同的,就认为是重复数据,就需要将重复数据给过滤掉。这里就用到了一个List来存放这几个字段所组成的主键转载 2015-06-15 15:14:36 · 3001 阅读 · 0 评论 -
java SynchronousQueue
在BlockingQueue的子类中有一个SynchronousQueue(同步队列)比较少见,现在做一个简单的介绍,并附加一个简单的例子。SynchronousQueue –JDK1.6介绍:public class SynchronousQueue<E>extends AbstractQueue<E>implements BlockingQueue<E>, Serializable 一种阻转载 2015-04-25 19:43:22 · 931 阅读 · 0 评论 -
java DelayQueue
我们谈一下实际的场景吧。我们在开发中,有如下场景a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。 b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。 c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。一种笨笨的办法就是,使用一个后台线程,遍历所有对象,挨个检查。这种笨笨的办法简单好用,但是对象数量过多时,可能存在性能问题,检查间转载 2015-04-25 11:38:47 · 772 阅读 · 0 评论 -
java LinkedTransferQueue
TransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法。LinkedTransferQueue是TransferQueue接口的实现类,其定义为一个无界的队列,具有先进先出(FIFO)的特性。 有人这样评价它:”TransferQueue是是ConcurrentLinkedQueue、SynchronousQueue (公平模式下)、无界的LinkedBl转载 2015-04-26 15:15:31 · 957 阅读 · 0 评论 -
java 集合Collection架构
概要首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图:Collection是一个接口,它主要的两个分支是:List 和 Set。List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素!List和Set都有它们各转载 2015-04-05 20:27:21 · 789 阅读 · 0 评论 -
Java 集合总体框架
Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)、。Java集合工具包框架图(如下):大致说明:看转载 2015-04-05 20:17:59 · 718 阅读 · 0 评论 -
Java Deque与LinkedBlockingDeque深入分析
一、双向队列DequeQueue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。 Deque在Q转载 2015-04-05 12:53:59 · 1209 阅读 · 0 评论 -
java 集合Set架构
前面,我们已经系统的对List和Map进行了学习。接下来,我们开始可以学习Set。相信经过Map的了解之后,学习Set会容易很多。毕竟,Set的实现类都是基于Map来实现的(HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Set架构。 (01) Set 是继承于Collection的接口。它是一个不允许有重复元转载 2015-04-05 20:34:39 · 745 阅读 · 0 评论 -
java 非阻塞算法在并发容器中的实现(ConcurrentLinkedQueue源码)
简介非阻塞算法在更细粒度的层面协调争用,它比传统的锁有更高的并发性。随着非阻塞算法在 Java 中的应用越来越广泛,java.concurrent 包中用非阻塞算法实现的并发容器也越来越多,ConcurrentLinkedQueue 就是其中的一个重要成员。鉴于 ConcurrentLinkedQueue 的非阻塞算法实现在并发容器中具有代表性,本文将结合 JDK Update23 的源代码来分析它转载 2015-04-05 19:38:55 · 1244 阅读 · 0 评论 -
android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
本篇文章主要是带大家从源码的角度上面去解读这个强大的图片加载框架,自己很久没有写文章了,感觉生疏了许多,距离上一篇文章三个月多了,确实是自己平常忙,换了工作很多东西都要去看去理解,然后加上自己也懒了,没有以前那么有激情了,我感觉这节奏不对,我要继续保持以前的激情,正所谓好记性不如烂笔头,有时候自己也会去翻看下之前写的东西,我觉得知识写下来比在脑海中留存的更久,今天就给大家来读一读这个框架的源码,我转载 2014-12-18 00:31:15 · 856 阅读 · 0 评论 -
spring 源码解读Spring IOC原理
Spring IOC设计原理解析:本文乃学习整理参考而来一、 什么是Ioc/DI?二、 Spring IOC体系结构(1) BeanFactory(2) BeanDefinition三、 IoC容器的初始化1、 XmlBeanFactory(屌丝IOC)的整个流程2、 FileSystemXmlApplicatio转载 2014-11-30 22:48:00 · 3418 阅读 · 2 评论 -
java 日志源码的进一步加深
Logger类:1记录特定系统或应用程序组件的日志消息,一般使用圆点分隔的层次名称来命名Logger。和包的命名类似。2.每个logger都有一个与其相关的“level”,如果他的logger级别为空,则他的有效级别继承自父logger。3.可以通过配置文件来配置日志级别,也可以通过Logger.setLevel方法动态修改,但是它的变化会影响其子logger的变化。转载 2014-10-20 20:32:18 · 685 阅读 · 0 评论 -
java 栈和Java基础类的Stack类的源码实现,缺陷以及如何实现自己的Stack类
栈是重要的数据结构,从数据结构角度看,栈也是线性表,其特殊性在栈的基本操作是线性表的子集。Stack作为最基本的数据结构,在JDK代码中,也有它的实现,java.util.Stack类是继承了Vector类,来实现了栈的基本功能。 1.栈的基本原理 栈(Stack)是限定仅在表尾进行插入或者删除操作的线性表。因此,对于栈来说,表尾端有特殊含义,成为栈顶,表头称之为栈转载 2014-07-19 22:31:38 · 1112 阅读 · 0 评论 -
java JDK源码中的Iterator
Iterator的意思是迭代器。在JDK源码中,Iterator是一个接口。 源码中,实现了Iterator接口的类,有很多:见图 1) java.util.*包中,所熟悉的一些Collection子类:AbstractList HashMap Hashtable LinkedHashMap LindedList TreeMap等;2) java.util.concurre转载 2014-07-20 15:39:00 · 959 阅读 · 0 评论 -
java源码分析:深入探讨Iterator模式
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.ut转载 2014-07-20 15:34:24 · 809 阅读 · 0 评论 -
java LinkedList原码分析(基于JDK1.6)
LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。 除此之外,LinkedList还提供了一些可以使其作为栈、队列、双端队列的方法。这些方法中有些彼此之间只是名称的区别,以使得这些名字在特定的上下文中显得更加的合适。转载 2014-07-20 14:24:09 · 759 阅读 · 0 评论 -
java 集合框架之LinkedList及ListIterator实现源码分析
1、 ArrayList中(实为AbstractList中)的ListIterator实现源码分析ArrayList的实现源码比较简单,就是对一个数组的一系列操作,比如添加一个元素后如果容量满则扩容操作、删除一个元素后使数组后面的元素像前移操作、扩容时把原来数组里的所有元素拷贝到新创建的数组中,其中对数组的拷贝与移动大量使用了 System.arraycopy,由于它底层是使用数组转载 2014-07-20 11:14:42 · 1234 阅读 · 0 评论 -
java 类库分析之Vector
看同学人手一本《STL源码剖析》,实在亚历山大。借过一看,实在晦涩难懂。于是想着从熟悉的java入手,看看java里面自带的类库是怎么实现这些容器的。于是乎,便有了这个java stl系列。其实这个名字是我自己起,java里面提供了许多常用的类库,使用十分方便。废话不多说,从Vector类开始分析吧。Vector类与ArrayList的实现基本相同,只是Vector类是线程安全的,而Arr转载 2014-07-19 21:59:45 · 762 阅读 · 0 评论 -
java Arrays.sort源代码解析
Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。 基本类型:采用调优的快速排序; 对象类型:采用改进的归并排序。一、对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序。对这一区别,转载 2014-07-19 15:02:41 · 736 阅读 · 0 评论 -
java Arrays.asList()源码剖析
Arrays工具类提供了一些比较实用的方法,比如sort, binarySearch, fill等。其中还有一个asList方法,此方法能够将一个变长参数或者数组转换成List。但是,这个生成的List,它是固定长度的,如果对其进行add或者remove的操作,会抛出UnsupportedOperationException,为什么会这样呢?带着疑问,查看一下Arrays的转载 2014-07-19 15:21:00 · 992 阅读 · 0 评论 -
java ArrayList(一)
为了提高自己的Java开发能力,我也向高手、牛人学习,去解读源码。自己底子差了点,不过看个源码还是没问题的。第一站ArrayList。源码为Java 1.7的源码ArrayList是一个实现可变长数组,继承AbstractList类,实现所有的List接口,还实现了RandomAccess、Cloneable、Serializable接口。ArrayList不进行同步,除此之外基本转载 2014-07-19 11:40:09 · 994 阅读 · 0 评论 -
java 类库分析之HashMap
JAVA类库分析之HashMap1. HashMap概述1.1)重要参数HashMap是什么,相信大家都很清楚,这里偷个懒,从网上摘了一段描述HashMap的文字:HashMap是基于哈希表的 Map接口的实现。此实现提供所有可选的映射操作,并允许使用 null值和 null 键。(除了HashMap非同步和允许使用 null之外,HashMap类与 Hashtable转载 2014-07-20 22:00:34 · 1048 阅读 · 0 评论 -
java HashMap和Hashtable区别
Hashtable的应用非常广泛,HashMap是新框架中用来代替Hashtable的类,也就是说建议使用HashMap,不要使用Hashtable。可能你觉得Hashtable很好用,为什么不用呢?这里简单分析他们的区别。1.Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。查看Ha转载 2014-07-21 19:13:18 · 771 阅读 · 0 评论 -
java 最常用的Java类 Top 100
大部分Java开发都会使用各种类库/框架及其API。 作者从10000个开源Java项目中提取并统计了各个 API Class 的使用频率,包括Java标准库和第三方类库。在每个项目中一个 class 只计数1次(这种方法也有一定的道理,因为有封装和重用,出现次数多不一定就是用的多)。下面列出了排名前100的 Class 。1. Top 100 Java Classes下面括号转载 2014-10-17 08:21:40 · 1184 阅读 · 0 评论