天天看点

卷妹带你回顾Java基础每日更新Day12

卷妹带你回顾Java基础每日更新Day12

👩‍💻博客主页:京与旧铺的博客主页

✨欢迎关注🖱点赞🎀收藏⭐留言✒

🔮本文由京与旧铺原创

😘系列专栏:java学习

👕参考网站:牛客网

💻首发时间:🎞2022年8月22日🎠

🎨你做三四月的事,八九月就会有答案,一起加油吧

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲

💬推荐一款模拟面试、刷题神器👉​​点击进入网站​​

🛒导航小助手🎪

文章目录

  • ​​卷妹带你回顾Java基础每日更新Day12​​
  • ​​🛒导航小助手🎪​​

多线程场景下如何使用

ArrayList**?**

ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的

synchronizedList 方法将其转换成线程安全的容器后再使用。例如像下面这样:

为什么 ArrayList 的 elementData 加上 transient 修饰? ArrayList 中的数组定

义如下:

再看一下 ArrayList 的定义:

可以看到 ArrayList 实现了 Serializable 接口,这意味着 ArrayList 支持序列

化。transient 的作用是说不希望 elementData 数组被序列化,重写了 writeObject 实现:

每次序列化时,先调用 defaultWriteObject() 方法序列化 ArrayList 中的非transient 元素,然后遍历

elementData,只序列化已存入的元素,这样既加快了序列化的速度,又减小了序列化之后的文件大

小。

List 和 Set 的区别

List , Set 都是继承自Collection 接口

List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null

元素,元素都有索引。

Set 特点:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null

元素,必须保证元素唯一性。Set 接口常用实现类是

HashSet、LinkedHashSet 以及 TreeSet。

另外 List 支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,

无法用下标来取得想要的值。

Set和List对比

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位

置改变

Set****接口

说一下 HashSet 的实现原理?

HashSet 是基于 HashMap 实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为

PRESENT,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层

HashMap 的相关方法来完成,HashSet 不允许重复的值。

HashSet****如何检查重复?HashSet是如何保证数据不可重复的?

向HashSet 中add ()元素时,判断元素是否存在的依据,不仅要比较hash值,同时还要结合equles 方法

比较。

HashSet 中的add ()方法会使用HashMap 的put()方法。

HashMap 的 key 是唯一的,由源码可以看出 HashSet 添加进去的值就是作为 HashMap 的key,并且