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 可以实现,它还可以按读取顺序来排列

5.总结

在这里插入图片描述

数据结构
ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

参考

Java集合常见面试题总结
菜鸟教程-集合
java集合超详解
java集合对比汇总

给个三连吧 谢谢谢谢谢谢了
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顶子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值