No1:

ArrayList的扩容策略是,新容量扩大为原来的1.5倍。

ArrayList不是线性安全的,因为没有使用synchronized关键字,但是优点是效率提高了。与之相比,Vector是线性安全的。

ArrayList解决线程不安全的办法就是使用synchronized关键字,哈哈哈

No2:

ArrayList的内部类SubList是父类的一个视图,其上的操作都会反射到父类ArrayList上。

比如:删除ArrayList从100到200的数据,使用方法

list.subList(100,200).clear();

即可

No3:

HashMap允许使用null值和null键

HashMap也是线程不安全的。

No4:

jdk1.8之前HashMap是基于数组+链表来实现,具有相同hash值的节点连在一个链表或树中。

jdk1.8中HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,大大减少了hash冲突时查找时间(从原来的O(n)->O(logn)),由于红黑树的节点空间是链表空间的2倍,为了节省空间,当链表长度减少到阈值(6)时,又会转换为链表形式。

No5:

HashMap链表中的结点对应HashMap中的Entry类(jdk1.8之前)或Node类(jdk1.8之后)。

HashMap其实就是一个Entry(或Node)数组,Entry(或Node)对象中包含了键和值,其中next也是一个Entry(或Node)对象,它就是用来处理hash冲突的,形成一个链表。

No6:

HashMap初始容量为16,加载因子是0.75,当HashMap中的元素个数超过数组大小*加载因子时,就会进行扩容,一般是扩容为2倍。

No7:

fail-fast机制:即快速失败机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。因为HashMap不是线程安全的。

No8:

HashMap中哈希函数构造方法是先通过hashCode()方法获取h值,再通过h&(length-1)来得到所在数组的位置。

length为2的整数幂保证了length-1最后一位为1,从而保证了h&(length-1)的最后一位同时有为0和为1的可能性,保证了散列的均匀性。

No9:

HashSet内部就是使用HashMap来存储元素的。

No10:

HashSet添加元素e,确保元素不重复

map中put方法说明:

  如果map中键e存在,则返回旧的键e对应的value值

  如果map中键e不存在,则返回null

返回值:有重复返回false,无重复返回true

public boolean add(E e){
return map.put(e,PRESENT)==null;
}

No11:

HashTable是线程同步的。

ConcurrentHashMap是线程安全高并发的。

No12:

HashTable是用数组+链表实现。

No13:

HashTable与HashMap主要区别是,hash函数的算法

HashTable用的是典型的除留取余法:

int index = (hash&0x7FFFFFFF)%tab.length

No14:

LinkedHashMap是数组+双链表结构。继承自HashMap。

No15:

集合中的类都有一个共同的迭代方法,就是先把这个集合转化成Set视图,然后再对这个Set视图进行迭代。

源码之Java集合的更多相关文章

  1. 从源码看Java集合之ArrayList

    Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...

  2. 源码:Java集合源码之:数组与链表(一)

    数组和链表是数据结构中最基本的部分. 数组 在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据.那么这种结构的数据,在内存中是怎么存放的呢? 数组在内存中是一段连续的存储单元,每 ...

  3. 源码:Java集合源码之:哈希表(二)

    要想知道一个元素是否在数组或链表中,只能从前向后挨个对比,无论是数组还是链表,其对数据的查询表现都比较无力.在的二叉排序树中,还会将数据排序以进行二分查找,将时间复杂度从O(n)降低到O(lg n). ...

  4. 源码(09) -- java.util.Arrays

    java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...

  5. 从源码学习Java并发的锁是怎么维护内部线程队列的

    从源码学习Java并发的锁是怎么维护内部线程队列的 在上一篇文章中,凯哥对同步组件基础框架- AbstractQueuedSynchronizer(AQS)做了大概的介绍.我们知道AQS能够通过内置的 ...

  6. JDK1.8源码(五)——java.util.Vector类

    JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html

  7. Java容器 | 基于源码分析List集合体系

    一.容器之List集合 List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM.集合.并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴 ...

  8. Java容器 | 基于源码分析Map集合体系

    一.容器之Map集合 集合体系的源码中,Map中的HashMap的设计堪称最经典,涉及数据结构.编程思想.哈希计算等等,在日常开发中对于一些源码的思想进行参考借鉴还是很有必要的. 基础:元素增查删.容 ...

  9. Java源码之 java.util.concurrent 学习笔记01

    准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...

随机推荐

  1. 华为mate 10 pro安装失败,提示没有未包含任何证书

    原因: Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护.在默认情况下,Androi ...

  2. Android 5.0 最应该实现的8个期望

    毫无疑问,Android 5 将是令人兴奋的操作系统,因为 Android4.0 至 4.4 版本之间并没有显著的差异,显然谷歌会在 5.0 版本中进行一些较大幅度的革新.那么,代号为“柠檬芝士蛋糕” ...

  3. [gym100956]Problem J. Sort It! BIT+组合数

    source : Pertozavodsk Winter Training Camp 2016 Day 1: SPb SU and SPb AU Contest, Friday, January 29 ...

  4. .NET 下第一次接触Redis数据库

    关于Redis 1.简介 Redis是著名的NOSQL(Not Only SQL)数据库,是键值对结构.(我只用过键值对结构的) 他为存储键值对做了优化,在大型网站中应用广泛.Redis提供了数据的自 ...

  5. Django 基础命令

  6. 关于maven环境下使用pom.xml引入包名.lastUpdate包的解决办法

    今天在导入POI-OOXML的时候总是缺失xmlbeans包,而且刷新pom文件总是生成一个lastupdate文件,大小为1KB,终于找到解决办法. 1.首先删除想要的jar包所在文件夹内的所有 . ...

  7. Python标准库内置函数complex介绍

    from:http://www.jb51.net/article/57798.htm 本函数可以使用参数real + imag*j方式创建一个复数.也可以转换一个字符串的数字为复数:或者转换一个数字为 ...

  8. jenkins 入门教程(上)【转】

    转自:https://www.cnblogs.com/yjmyzz/p/jenkins-tutorial-part-1.html jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更 ...

  9. 嵌入式linux/android alsa_aplay alsa_amixer命令行用法

    几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: ll ...

  10. Mysql_Learning_Notes_mysql系统结构_2

    Mysql_Learning_Notes_mysql系统结构_2 三层体系结构,启动方式,日志类型及解析方法,mysql 升级 连接层 通信协议处理\线程处理\账号认证(用户名和密码认证)\安全检查等 ...