随笔分类 - 集合
摘要:/** * ConcurrentHashMap效率最高 */ public class MapTest { public static void main(String[] args) throws InterruptedException { pressureTest(new Hashtable<
阅读全文
摘要:/** * LinkedBlockingDeque 有链表组成的可选容量的双端阻塞队列 * 他比LinkedBlockingQueue的优点是可以两端向队列中添加元素 */ /** * 考虑下面这样一种场景:有多个消费者,每个消费者有自己的一个消息队列, * 生产者不断的生产数据扔到队列中,消费者消
阅读全文
摘要:/** *LinkedTransferQueue是有容量的, * 当第一个生产者线程调用transfer时,如果没有消费者,会阻塞。 * 第二个生产者线程调用transfer时,如果没有消费者,会添加到队列的末尾。 * 直到有消费者进行消费时调用take方法,被阻塞的生产者线程才继续运行 */ /*
阅读全文
摘要:/** * 当向SynchronousQueue插入元素时,必须同时有个线程往外取 * SynchronousQueue是没有容量的,这是与其他的阻塞队列不同的地方 */ public class SynchronusQueueTest { static SynchronousQueue<Strin
阅读全文
摘要:/** * DelayQueue 底层包含一个PriorityQueue。 * 向DelayQueue插入的元素必须实现delay接口,DelayQueue是不边界的 * 只有当队列中的元素过期了,即getDalay方法返回值小于0,元素才可以取出来 * 当元素过期了不取出来,不会被删除,元素仍然在
阅读全文
摘要:/** * LinkedBlockingQueue的方法同ArrayBlockingQueue, * 区别在于LinkedBlockingQueue既可以指定大小,不指定大小默认是Interger.Max * 而ArrayBlockingQueue 必须指定大小 */ public class Li
阅读全文
摘要:public class PriorityBlockingQueueTest { /** * 有优先级顺序的阻塞队列,底层实现是数组,无边界。默认是11. * 构造方法可以传入一个比较器,不传的话,默认是按照字典排序比较大小 * 向队列中插入元素用 add offer , put 三个方法效果是等同
阅读全文
摘要:/** * add 超过capacity会抛出异常 remove 队列为空会抛出异常 add和remove底层也是调用的offer和poll方法 * * offer 超过capacity会返回false poll 队列为空会返回null * * put 超过capacity会阻塞 take 队列为空
阅读全文
摘要:public class MyLinkedList<E> { private Node first; private int size; public int size(){ return size; } @Override public String toString() { if(size ==
阅读全文
摘要:实现简单版的HashMap 只是将map的添加,查询,扩容实现了 与JDK7源码中不同点,JDK中的hash函数是用到了很多的位运算,可以减少hash冲突,自己实现的HashMap只是简单利用了Object对象的hashCode函数 这里的扩容参考了JDK中的方法,涉及到引用传递,多看几遍就懂了 /
阅读全文
摘要:在ArrayList源码中主要的两个属性是 Object数组和元素个数, elementData 用transient修饰的原因:当数组长度为10,这时候只有5个元素,默认序列化会占用10个空间。用transient修饰后,再重写writeOjbect和readObject可以自己定义序列化逻辑,节
阅读全文
摘要:1.8中的HashMap HashMap 数组+单向链表+红黑树 特点:无序 ,线程不安全 为什么是无序的,往hashmap中添加元素时,是将key hash之后能均匀的分布在hash表中 key和value都可以是null capacity 默认是16 (哈希表的长度) loadFactor 默认
阅读全文

浙公网安备 33010602011771号