java 集合
文章平均质量分 90
iteye_8208
这个作者很懒,什么都没留下…
展开
-
数据结构之哈希表
哈希表:哈希表是通常的数组概念的推广。在一个普通的数组中,最有效的查找一个元素的方法是直接寻址,时间复杂度是O(1)。直接寻址的基本思想是:如果存储空间允许,我们可以为每个关键字分配一个位置,每个元素的存储地址就是关键字对应的数组下标。 使用直接寻址的问题是:当查找表中关键字取值的范围较小时直接寻址是一种非常好的方法,但是,如果关键字的可能取值范围U 非常大,则要在一台...原创 2016-04-14 13:37:03 · 110 阅读 · 0 评论 -
Java消息队列任务的平滑关闭
摘要: 对于消息队列的监听,我们一般使用Java写一个独立的程序,在Linux服务器上运行。程序启动后,通过消息队列客户端接收消息,放入一个线程池进行异步处理,并发的快速处理。当我们修改程序后,需要重新启动任务的时候,如何保证消息的不丢失呢? 1.问题背景 对于消息队列的监听,我们一般使用Java写一个独立的程序,在Linux服务器上运行。程序启动后,通过消息队列客户端接收消息,放...原创 2016-12-10 08:36:19 · 243 阅读 · 0 评论 -
BitSet的源码研究
这几天看Bloom Filter,因为在java中,并不能像C/C++一样直接操纵bit级别的数据,所以只能另想办法替代: 1)使用整数数组来替代; 2)使用BitSet; BitSet实际是由“二进制位”构成的一个Vector。如果希望高效率地保存大量“开-关”信息,就应使用BitSet。它只有从尺寸的角度看才有意义;如果希望的高效率的访问,那么它的速度会比使用一些固有类型的数组慢一些。...原创 2016-11-12 12:20:59 · 125 阅读 · 0 评论 -
java中fail-fast 和 fail-safe的区别
原文地址:http://javahungry.blogspot.com/2014/04/fail-fast-iterator-vs-fail-safe-iterator-difference-with-example-in-Java.html 在我们详细讨论这两种机制的区别之前,首先得先了解并发修改。 1.什么是并发修改? 当一个或多个线程正在遍历一个集合Collection,此时...原创 2016-10-17 21:48:24 · 356 阅读 · 0 评论 -
Java中的Copy-On-Write容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet...原创 2016-10-16 18:53:26 · 82 阅读 · 0 评论 -
ArrayList的实现原理
一、 ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并...原创 2016-10-10 13:01:21 · 94 阅读 · 0 评论 -
HashSet的实现原理
1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个private static...原创 2016-10-10 12:58:22 · 110 阅读 · 0 评论 -
HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外...原创 2016-10-09 21:30:34 · 89 阅读 · 0 评论 -
深入分析ConcurrentHashMap
ConcurrentHashMap的目的 多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。虽然已经有一个线程安全的HashTable,但是HashTable容器使用synchronized(他的get和put方法的实现代码如下)来保证线程安全,在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程...原创 2016-10-05 17:38:02 · 89 阅读 · 0 评论 -
Java多线程理解:线程安全的集合对象
1、概念介绍 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,多线程先后更改数据会产生数据不一致或者数据污染的情况。 一般使用synchronized关键字加锁同步控制,来解决线程不安全问题。 2、线程安全的集合对象 A...原创 2016-10-04 01:35:45 · 238 阅读 · 0 评论 -
think in java 对象的容纳
数组: 无论使用的数组属于什么类型,数组标识符实际都是指向真实对象的一个句柄。那些对象本身都在堆中创建。数组对象唯一能访问的字段是只读的length成员,它告诉我们那个数组对象里最多能容纳多少元素;对于数组对象,“[ ]”语法是我们能采用的唯一另类访问方法。 int[] arr1; int[] arr2 = {1, 2, 3, 4, 5}; arr1 = a...原创 2016-05-03 13:16:24 · 91 阅读 · 0 评论 -
数据结构之线性表
线性结构是最简单,也是最常用的数据结构之一。线性结构的特点是:在数据元素的有限集中,除第一个元素无直接前驱,最后一个元素无直接后续以外,每个数据元素有且仅有一个直接前驱元素和一个直接后续元素。 在线性表的具体实现中,表中相邻的元素不一定存储在连续的内存空间中,除非表是用数组来实现的。对于数组,可以利用其下标在一个操作内随机存取任意位置上的元素;对于线性表,只...原创 2016-04-14 13:39:01 · 128 阅读 · 0 评论 -
数据结构之栈与队列
栈和队列是两种重要的数据结构。从栈与队列的逻辑结构上来说,它们也是线性结构,与线性表不同的是它们所支持的基本操作是受到限制的,它们是操作受限的线性表,是一种限定性的数据结构。 栈(stack)又称堆栈,它是运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操作的一端称为栈顶...原创 2016-04-14 13:38:55 · 101 阅读 · 0 评论 -
数据结构之二叉树
二叉树存储结构结点定义: public class BinaryTreeNode implements Node { private Object data; //数据域 private BinaryTreeNode parent; //父结点 private BinaryTreeNode lChild; //左孩子 private BinaryTreeN...原创 2016-04-14 13:38:37 · 78 阅读 · 0 评论 -
数据结构之递归
递归(recursion)是指在定义自身的同时又出现了对自身的引用。如果一个算法直接或间接地调用自己,则称这个算法是一个递归算法。 任何一个有意义的递归算法总是由两部分组成:递归调用与递归终止条件。 /** * 阶汉诺塔问题可以描述为:假设有X、Y、Z 三个塔座,初始时有n 个大小不一的 * 盘子按照从小到大的次序放在塔座X 上。现在要求将塔座X...原创 2016-04-14 13:37:13 · 116 阅读 · 0 评论 -
Java延时队列DelayQueue的使用
摘要: DelayQueue的使用场景以及介绍 问题背景 最近的某个业务中,遇到一个问题,一个用户动作,会产生A和B两个行为,分别通过对应的esb消息总线发出。 我们的业务线对AB两条esb消息队列进行监听(两个进程),做数据的同步更新操作。 在正常过程中,A行为比B行为先产生,并且A行为优先级高于B行为,数据最终会根据A行为做更新。 但是在实际应用中,出现了并发问题...原创 2016-12-10 08:43:04 · 427 阅读 · 0 评论