我是🌟廖志伟🌟,一名🌕Java开发工程师🌕、📝Java领域优质创作者📝、🎉CSDN博客专家🎉、🌹幕后大佬社区创始人🌹。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。
🍊博主:java_wxid
🍊博主:Java廖志伟
🍊社区:幕后大佬
文章目录
本文的大概内容:
java集合
Java集合框架的根接口有Collection和Map。Collection根接口包含List和Set二个子接口。
List接口:
它的特点是:元素有序、且可重复,主要包含三个实现类:ArrayList,vector,LinkedList。
ArrayList:
特点:底层是数组,线程不安全,查找快,增删慢(数组的特点)。
底层实现原理:通过ArrrayList空参构造器创建对象。底层创建一个长度为10的数组,当我们向数组中添加11个元素时,底层会进行扩容,扩容为原来的1.5倍。(创建一个新的数组,长度为原数组长度的1.5倍,将原数组复制到新数组中)。
vector的特点:
古老的实现类,底层是数组,线程安全的,JDK1.0就有了,Vector总是比ArrayList慢,所以尽量避免使用。
LinkedList的特点:
底层是使用双向链表。增删快,查找慢。
Set接口
它的特点: 无序性:通过HashCode方法算出的值来决定在数组中存放的位置;
不可重复性:进行equals方法比较,结果为true则两个数据相同,若为false则不同。
主要包含三个实现类:HashSet,LinkedHashSet,TreeSet。
HashSet
特点:线程不安全,集合元素可以为null,不能保证元素的排列顺序 底层实现原理:
当向HashSet添加数据时,首先调用HashCode方法决定数据存放在数组中的位置,该位置上没有其他元素,则将数据直接存放,若该位置上有其他元素,调用equals方法进行比较。若返回true则认为两个数据相同,若返回false,则以链表的形式将该数据存在该位置上,(jdk1.8)如果数量达到8则将链表换成红黑树。HashSet的底层就是一个HashMap,向HashSet中添加的数据实际上添加到了HashMap中的key里。所以HashMap的key可以看成是Set的集合。
LinkedHashSet
特点:继承了HashSet,底层实现原理和HashSet一样,可以安照元素添加的顺序进行遍历根据元素的hashCode值来决定元素的存储位置,它维护了一张链表该链表记录了元素添加的顺序。底层就是一个LinkedHashMap。
TreeSet特点:
底层为红黑树;可以安照指定的元素进行排序;TreeSet中的元素类型必须保持一致,
底层就是TreeMap。TreeSet必须(自然排序)实现Comparable接口,重写compareTo()方法,按照某个属性进行排序,相结合添加元素或(定制排序)创建一个Comparator实现类的对象,并传入到TreeSet的构造器中,按照某个属性进行排序,向集合添加元素。定制排序比自然排序灵活。
如果即有自然排序又有定制排序谁起作用? 定制排序
Map接口
Map的特点:
Map存储的是键值对(key,value),Map中的key是无序的且不可重复的,所有的key可以看成是一个set集合。Map中的key如果是自定义类的对象必须重写hashCode和equals方法,Map中的value是无序的可重复的,所有的value可以看成是Collection集合,Map中的value如果是自定义类的对象必须重写equals方法,Map中的键值对可以看成是一个一个的Entry.Entry所存放的位置是由key来决定的。Entry是无序的不可重复的。主要的实现类:HashMap,LinkedHashMap,TreeMap,HashTable.
HashMap特点
1.底层是一个数组 + 链表 + 红黑树(jdk1.8)
2.数组的类型是一个Node类型
3.Node中有key和value的属性
4.根据key的hashCode方法来决定Node存放的位置
5.线程不安全的 ,可以存放null
HashMap的底层实现原理:
当我们向HashMap中存放一个元素(k1,v1),先根据k1的hashCode方法来决定在数组中存放的位置。如果该位置没有其它元素则将(k1,v1)直接放入数组中,如果该位置已经有其它元素(k2,v2),调用k1的equals方法和k2进行比较。如果结果为true则用v1替换v2,如果返回值为false则以链表的形式将(k1,v1)存放,当元素达到8时则会将链表替换成红黑树以提高查找效率。
HashMap的构造器:new HashMap() :创建一个容量为16的数组,加载因子为0.75。
当我们添加的数据超过12时底层会进行扩容,扩容为原来的2倍。
LinkedHashMap:
继承了HashMap底层实现和HashMap一样. 可以安照元素添加的顺序进行遍历底层维护了一张链表用来记录元素添加的顺序。
TreeMap特点:
可以对Key中的元素安照指定的顺序进行排序 ( 不能对value进行排序)
HashTable特点:
线程安全的 ,不可以存放null,map中的key不能重复,如果有重复的,后者的value覆盖前者的value
总结
以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议📝,合理的内容,我会采纳更新博文,重新分享给大家。
🙏四连 关注🔎点赞👍收藏⭐️留言📝
感谢大家的支持,用心写博文分享给大家,你的支持(🔎点赞👍收藏⭐️留言📝)是对我创作的最大帮助。
🍊微信公众号:南北踏尘
🍊主页地址:java_wxid
🍊社区地址:幕后大佬
给读者大大的话
我本身是一个很普通的程序员,放在人堆里,除了与生俱来的🌹盛世美颜🌹、所剩不多的发量,就剩下180的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,🌕牛逼之前都是傻逼式的坚持🌕。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的🌟技术影响力🌟。同时也希望自己可以成为一个🎄懂技术🎄,🎄懂业务🎄,🎄懂管理🎄的综合型人才,作为项目架构路线的总设计师,掌控全局的🌕团队大脑🌕,技术团队中的🍊绝对核心🍊是我未来几年不断前进的目标。
提示:以下都是资源分享,求个一键三连。
面试资料
福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:面试资料
提取码:2021
200套PPT模板
福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:200套PPT模板
提取码:2021
提问的智慧
福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:提问的智慧
提取码:2021
Java开发学习路线
名称 | 链接 |
---|---|
JavaSE | 点击: JavaSE |
MySQL专栏 | 点击: MySQL专栏 |
JDBC专栏 | 点击: JDBC专栏 |
MyBatis专栏 | 点击: MyBatis专栏 |
Web专栏 | 点击: Web专栏 |
Spring专栏 | 点击: Spring专栏 |
SpringMVC专栏 | 点击: SpringMVC专栏 |
SpringBoot专栏 | 点击: SpringBoot专栏 |
SpringCould专栏 | 点击: SpringCould专栏 |
Redis专栏 | 点击: Redis专栏 |
Linux专栏 | 点击: Linux专栏 |
Maven3专栏 | 点击: Maven3专栏 |
Spring Security5专栏 | 点击: Spring Security5专栏 |
更多专栏 | 更多专栏,请到 java_wxid主页 查看 |
P5学习路线图
P6学习路线图
P7学习路线图
P8学习路线图
以上四张图详细介绍了作为Java开发工作者所需要具备的知识技能,同学们学废了嘛,有想法系统学习的同学可以私聊我,🎉欢迎关注🔎点赞👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志伟
🍊社区:幕后大佬
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?