Java基础学习之集合底层原理

 更新时间:2021年05月27日 17:25:23   作者:!0 !  
今天带大家回顾Java基础的相关知识,文中对集合底层原理作了非常详细的图文介绍,对Java初学者有非常好的帮助,需要的朋友可以参考下

一、Collection集合

在这里插入图片描述

Collection接口是单列集合类的父接口,这种集合可以将数据一个一个的存放到集合中。它有两个重要的子接口,分别是 java.util.List 和 java.util.Set

二、List接口

1、特点

  •  List是一种有序的集合
  • List是一种带索引的集合
  • List是一种可以存放重复数据的集合

2、List接口三个主要实现类

在这里插入图片描述

3、【面试题】ArrayList、LinkedList、Vector的区别

①ArrayList:线程不安全,查询效率高,插入、删除效率低;底层使用数组存储;
②LinkedList:对于频繁的插入、删除操作效率比ArrayList高,但是查询效率低;底层使用双向链表;
③Vector:线程安全,查询效率高,插入、删除效率低;底层使用数组存储;

源码分析:ArrayList

jdk7

创建对象时底层会创建一个长度为10的数组,默认情况下,扩容为原来的1.5倍,同时将数组复制到新数组中。

jkd8

创建对象时底层不会创建长度为10的数组,而是等到有数据添加进来时才创建。(节约空间,提高效率)

Vector

jdk7和8中创建对象时,底层都创建了长度为10的数组,扩容为原来的2倍

三、Set(Set底层是由Map实现的,所以一般都是问Map)

1、特点

能存储无序、不可重复的元素。
底层:数组+链表

2、无序性

无序性:不等于随机性。存储的数据在底层数组中并非照数组索引的顺序添加,而是根据数据的哈希值决定的。

3、不可重复性

保证添加的元素照equals()判断时,不能返回true.即:相同的元素只能添加一个。

四、Map

1、特点

无序的,不可重复的,由K-V键值对组成。

2、HashMap的源码分析

  • jdk7

在创建对象之后,底层会创建长度为16的一维数组Entry,当元素个数超过加载因子乘以数组长度时,并且当前添加元素发生了碰撞,就会进行扩容,扩容为原来的2倍,并复制到新数组中

  • jdk8

在创建对象之后底层没有创建长度为16的数组;
首次添加元素时才创建长度为16的数组
jkd8中数Node[],jdk7时Entry[](就只有名字不同)
jdk7底层是数组+链表;而jdk8中是数组+链表+红黑树
形成链表时,jdk7是新元素指向旧元素;jdk8是旧元素指向新元素(防止高并发造成的死循环)
当链表长度大于8并且数组长度大于64时,才会变成红黑树(提高查找效率)

3、LinkedHashMap

继承于HashMap,用于实现LUR算法

4、Hashtable

线程安全的,k-v都不能为空。
创建对象时默认为11,扩容为原来的2倍加1

到此这篇关于Java基础学习之集合底层原理的文章就介绍到这了,更多相关Java集合底层原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring boot中多线程开发的注意事项总结

    spring boot中多线程开发的注意事项总结

    spring boot 通过任务执行器 taskexecutor 来实现多线程和并发编程。下面这篇文章主要给大家介绍了关于spring boot中多线程开发的注意事项,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • logback TimeBasedRollingPolicy按天生成日志源码解析

    logback TimeBasedRollingPolicy按天生成日志源码解析

    这篇文章主要为大家介绍了logback TimeBasedRollingPolicy按天生成日志源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 详细介绍Spring的配置文件

    详细介绍Spring的配置文件

    这篇文章主要为大家详细介绍了Spring中的配置文件的命名以及它的配置文件都有些什么。文中的示例代码讲解详细,感兴趣的小伙伴可以跟上小编一起学习一下
    2022-10-10
  • SpringBoot 配置提示功能(超详细)

    SpringBoot 配置提示功能(超详细)

    这篇文章主要介绍了SpringBoot 配置提示功能,本文给大家介绍的超详细,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Java中StringUtils与CollectionUtils和ObjectUtil概念讲解

    Java中StringUtils与CollectionUtils和ObjectUtil概念讲解

    这篇文章主要介绍了Java中StringUtils与CollectionUtils和ObjectUtil概念,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java并发编程Semaphore计数信号量详解

    Java并发编程Semaphore计数信号量详解

    这篇文章主要介绍了Java并发编程Semaphore计数信号量详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java的静态方法Arrays.asList()使用指南

    Java的静态方法Arrays.asList()使用指南

    Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合,这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性,本文将介绍 Arrays.asList() 的语法、应用场景、坑点和总结
    2023-09-09
  • 解决jasperreport导出的pdf每页显示的记录太少问题

    解决jasperreport导出的pdf每页显示的记录太少问题

    这篇文章主要介绍了解决jasperreport导出的pdf每页显示的记录太少问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 简单谈谈Java垃圾回收

    简单谈谈Java垃圾回收

    本文是看了James Gosling的<<Java程序设计语言>>后结合自己的一些项目经验,简单总结下关于java的垃圾回收问题的看法,有需要的小伙伴可以参考下
    2016-05-05
  • mybatis教程之动态sql语句_动力节点Java学院整理

    mybatis教程之动态sql语句_动力节点Java学院整理

    这篇文章主要介绍了mybatis教程之动态sql语句,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论