天天看點

卷妹帶你回顧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,并且