Java集合常见问题


文章所属专区 超链接


1.前言

Java集合是Java语言中用于存储、组织数据的一组工具,它们可以帮助我们更有效地进行编程。Java集合大致可以分为以下四种类型:
List:有序集合,可以存储重复的元素3。常见的实现有ArrayList和LinkedList3。
Set:无序集合,只能存储一次,不能重复元素3。常见的实现有HashSet、LinkedHashSet和TreeSet3。
Map:键值对(key-value)的集合,键不能重复,值可以重复3。常见的实现有HashMap、LinkedHashMap和TreeMap。
Queue:先进行元素添加,后进行元素删除的队列4。常见的实现有PriorityQueue和LinkedList4。

2.集合

集合也叫容器,主要由两大类派生,一类是操作单个元素的Collection接口,另外一类是操作键值对的Map接口。其中Collection包含了List , Set ,Queue

3.Collection接口类

在这里插入图片描述

3.1 List接口

有序集合,可存储有序的可重复的元素。

3.1.1 ArrayList(常用)

底层数据结构是数组,查询快,增删慢,线程不安全,效率高。

3.1.2 LinkedList(常用)

底层数据结构是链表,查询慢,增删快,线程不安全,效率高。

3.1.3 Vector(不常用)

底层数据结构是数组,查询快,增删慢,线程安全,效率低。

3.2 Set接口

无序集合,存储无序的不可重复的元素。

3.2.1 HashSet(常用)

底层数据结构是哈希表(数组),元素无序且唯一(是否重写hashCode()和equals()方法来保证的)线程不安全,效率高。

具体实现唯一性的比较过程:存储元素首先会使用hash()算法函数生成一个int类型hashCode散列值,然后已经的所存储的元素的hashCode值比较,如果hashCode不相等,则所存储的两个对象一定不相等,此时存储当前的新的hashCode值处的元素对象;如果hashCode相等,存储元素的对象还是不一定相等,此时会调用equals()方法判断两个对象的内容是否相等,如果内容相等,那么就是同一个对象,无需存储;如果比较的内容不相等,那么就是不同的对象,就该存储了,此时就要采用哈希的解决地址冲突算法,在当前hashCode值处类似一个新的链表, 在同一个hashCode值的后面存储存储不同的对象,这样就保证了元素的唯一性。
Set的实现类的集合对象中不能够有重复元素,HashSet也一样他是使用了一种标识来确定元素的不重复,HashSet用一种算法来保证HashSet中的元素是不重复的, HashSet采用哈希算法,底层用数组存储数据。默认初始化容量16,加载因子0.75。
Object类中的hashCode()的方法是所有子类都会继承这个方法,这个方法会用Hash算法算出一个Hash(哈希)码值返回,HashSet会用Hash码值去和数组长度取模, 模(这个模就是对象要存放在数组中的位置)相同时才会判断数组中的元素和要加入的对象的内容是否相同,如果不同才会添加进去。

3.2.2 LinkedHashSet(不常用)

底层数据结构是链表和哈希表,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性,线程不安全,效率高。

3.2.3 TreeSet(常用)

底层数据结构是二叉树,元素有序且唯一,唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。

3.3 Queue接口

有序集合,存储有序的可重复的元素。

4.Map接口类

键值对(key-value)的集合,键不能重复,值可以重复。
在这里插入图片描述

4.1 HashMap接口

1.根据键的HashCode值存储数据,可以根据键直接获取它的值,访问速度快,遍历时,取得的数据顺序是完全随机。
2.只允许一条记录的键为Null,允许多条记录的值为Null;
3.不支持线程同步,不安全,任意时刻有多个线程同时写HashMap,可能会导致数据不一致。
4.如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

4.2 LinkedHashMap接口

1.LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序
2.在使用iterator遍历LinkedHashMap时,得到使得是先插入的数据。

4.3 TreeMap接口

1.TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认按键值的圣墟排序,也可以指定排序的比较器,当用iterator遍历TreeMap时,得到的记录是排序过的。

一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。
但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

s/73bb5de17851459088c6af944156ee24.jpg" alt=“img” style=“zoom: 67%;” />

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值