
collection
varyall
这个作者很懒,什么都没留下…
展开
-
HashSet、LinkedHashSet、TreeSet使用区别
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放; LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代; TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。 HashSet不是有序的,底层基于hashMap实现 LinkedHashSet转载 2017-12-11 14:13:19 · 292 阅读 · 0 评论 -
RandomAccess接口理解
根据javadoc上面的的解释是: RandomAccess 是一个标记接口,用于标明实现该接口的List支持快速随机访问,主要目的是使算法能够在随机和顺序访问的list中表现的更加高效。 我们可以简单的看下Collections下的binarySearch方法的源码: public static <T> int binarySearch(List&...转载 2018-08-23 22:03:34 · 520 阅读 · 0 评论 -
ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/weixin_39148512/article/details/79234817 众所周知,在List集合中,我们经常会用到ArrayList以及LinkedList集合,但是通过查看源码,就会发现ArrayList实现RandomAccess接口,但是RandomAccess接口里面是空的!Lin...转载 2018-08-23 22:02:58 · 189 阅读 · 0 评论 -
ConcurrentHashMap的扩容机制(jdk1.8)
ConcurrentHashMap相关的文章网上有很多,而关于ConcurrentHashMap扩容机制是很关键的点,尤其是在并发的情况下实现数组的扩容的问题经常会碰到,看到这篇写的具有代表性,详细讲解了ConcurrentHashMap是如何在并发情况扩容的。 转自简书:占小狼http://www.jianshu.com/u/90ab66c248e6 什么情况会触发扩容 当往hashMap...转载 2018-07-29 23:35:40 · 8672 阅读 · 0 评论 -
ConcurrentHashMap JDK1.7与JDK1.8源码区别
前言 以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。...转载 2018-07-29 23:22:01 · 275 阅读 · 0 评论 -
hashmap hashtable ConcurrentHashMap 扩容
hashmap扩容: 默认大小: 16, 增长因子:0.75 扩容点规则(什么时候扩容): 16*0.75=12 存储方式:数组+链表 扩容方法:扩容为原来的2倍 出现于:JDK1.2 扩容条件: 1、判断当前个数是否大于等于阈值 2、当前存放是否发生哈希碰撞 hashtable扩容: 默认大小: 11, 增长因子:0.75 扩容点规则(什么时候扩容): 11*0.75...原创 2018-07-29 23:18:06 · 2286 阅读 · 3 评论 -
ArrayList Vector 扩容
ArrayList 扩容(JDK1.6): 默认大小:10 扩容点规则(什么时候扩容): 整除运算将容量扩展为原来的1.5倍加1, 扩容实现代码newCapacity = oldCapacity + oldCapacity/2 +1;扩容容量为1.5倍加一; 存储方式:数组 扩容方法:Arrays.copyOf(elementData, size); 扩容序列化:ArrayList实现j...原创 2018-07-29 23:12:10 · 282 阅读 · 0 评论 -
SynchronizedMap
Doug Lea的util.concurrent包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型List和Map的高性能的、线程安全的实现。Brian Goetz向您展示了用ConcurrentHashMap替换Hashtable或synchronizedMap,将有多少并发程序获益。 在Java类库中出现的第一个关联的集合类是Hashtable,它是JDK 1.0的一部分。Ha...转载 2018-07-29 22:19:22 · 12246 阅读 · 1 评论 -
【算法】堆,最大堆(大顶堆)及最小堆(小顶堆)的实现
转:http://blog.youkuaiyun.com/cdnight/article/details/11650983此坑待埋。点击打开漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析链接白话经典算法系列之七 堆与堆排序二叉排序树与二叉堆堆排序(注:这篇文章说明了如何从一个数组构建一个最大堆,推荐看)最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)下面来说一说具体算法。堆排序解释第一篇(...转载 2018-07-10 22:03:14 · 8122 阅读 · 0 评论 -
HashTable实现原理
有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对H...转载 2018-07-10 21:07:07 · 17813 阅读 · 0 评论 -
HashMap、HashTable和Vector的存储扩容解析
HashMap、HashTable和Vector是面试时比较高频问到的知识点,今天就从三个的底层源码的角度分析三者之间的存储、扩容原理和异同点。HashMap:实现Map接口 实现原理:HashMap采用链地址法。即底层是一个数组实现。数组的每一项(即一个Entry)又是一个链表。结构图如下:每个Entry是一个键值对。源码如下:1. transient ...转载 2018-07-10 11:53:50 · 1246 阅读 · 1 评论 -
HashMap,LinkedHashMap,TreeMap的区别
HashMap:key-value的结构, LinkedHashMap继承自HashMap,一个有序的Map接口实现,这里的有序指的是元素可以按插入顺序或访问顺序排列;与HashMap的异同:同样是基于散列表实现,区别是,LinkedHashMap内部多了一个双向循环链表的维护,该链表是有序的,可以按元素插入顺序或元素最近访问顺序(LRU)排列 TreeMap取出来的是排序后的转载 2017-12-11 14:16:43 · 247 阅读 · 0 评论 -
ArrayList、LinkedList、Vector的区别
Arraylist和Vector是采用数组方式存储数据,LinkedList使用双向链表实现存储和组织数据,vector是线程安全的,通过synchronized在每个方法上面声明保证安全,Arraylist和LinkedList是线程不安全的, 1、ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组转载 2017-12-11 14:15:33 · 229 阅读 · 0 评论 -
Comparable接口对list的多条件排序
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/xiaoyanghapi/article/details/52496325 普通的类要实现排序,必须实现Comparable接口,并重写CompareTo()方法。 package test; public class People implements Comparable<Field&...转载 2018-09-14 10:44:28 · 1318 阅读 · 0 评论