1. 程式人生 > >集合類、集合框架

集合類、集合框架

Spring Boot入門一:在Eclipse中使用Spring boot

https://www.cnblogs.com/achengmu/p/8082457.html
**java錯誤:**The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bu


在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

解決方法:window——>preference 進入下圖。

在這裡插入圖片描述

 不同點:

         WebRoot是MyEclipse建立的web專案,可以新增一些開源的框架支援,如struts、hibernate。。。也就是說                      web project是MyEclipse擴充套件後的專案,它具有dynamic web  project 特性並具有一些整合功能。

             

           WebContent是Eclipse下面建立的dynamic web  project,與他對應的是static  web  project,dynamic web  project包含一些動態程式碼,如Java,而static  web  project僅包含靜態檔案。

List 和Set 的區別 ?

List:1.可以允許重複的物件。
   2.可以插入多個null元素。
3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。
4.常用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪問,而 LinkedList 則對於經常需要從 List 中新增或刪除元素的場合更為合適。

Set:1.不允許重複物件
   2. 無序容器,你無法保證每個元素的儲存順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序。
3. 只允許一個 null 元素
4.Set 介面最流行的幾個實現類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基於 HashMap 實現的 HashSet;TreeSet 還實現了 SortedSet 介面,因此 TreeSet 是一個根據其 compare() 和 compareTo() 的定義進行排序的有序容器。

(雖然都實現了Map、Cloneable、Serializable三個介面。但是HashMap繼承自抽象類AbstractMap,而HashTable繼承自抽象類Dictionary。其中Dictionary類是一個已經被廢棄的類)
(HashTable比HashMap多了兩個公開方法。一個是elements,這來自於抽象類Dictionary,鑑於該類已經廢棄,所以這個方法也就沒什麼用處了。另一個多出來的方法是contains,這個多出來的方法也沒什麼用,因為它跟containsValue方法功能是一樣的)
(從公開的方法上來看,這兩個類提供的,是一樣的功能。都提供鍵值對映的服務,可以增、刪、查、改鍵值對,可以對建、值、鍵值對提供遍歷檢視。支援淺拷貝,支援序列化。)
(HashMap是支援null鍵和null值的,而HashTable在遇到null時,會丟擲NullPointerException異常。這並不是因為HashTable有什麼特殊的實現層面的原因導致不能支援null鍵和null值,這僅僅是因為HashMap在實現時對null做了特殊處理,將null的hashCode值定為了0,從而將其存放在雜湊表的第0個bucket中。)

HashMap/HashTable內部用Entry陣列實現雜湊表,而對於對映到同一個雜湊桶(陣列的同一個位置)的鍵值對,使用Entry連結串列來儲存(解決hash衝突)。

當雜湊表的大小為素數時,簡單的取模雜湊的結果會更加均勻。
在取模計算時,如果模數是2的冪,那麼我們可以直接使用位運算來得到結果,效率要大大高於做除法。所以從hash計算的效率上,又是HashMap更勝一籌。
HashMap為了加快hash的速度,將雜湊表的大小固定為了2的冪。當然這引入了雜湊分佈不均勻的問題。由於引入的hash衝突加劇問題,HashMap在呼叫了物件的hashCode方法之後,又做了一些位運算在打散資料。

HashMap和HashTable在計算hash時都用到了一個叫hashSeed的變數。這是因為對映到同一個hash桶內的Entry物件,是以連結串列的形式存在的,而連結串列的查詢效率比較低,所以HashMap/HashTable的效率對雜湊衝突非常敏感,所以可以額外開啟一個可選hash(hashSeed),從而減少雜湊衝突。但是,這個優化在JDK 1.8中已經去掉了,因為JDK1.8中,對映到同一個雜湊桶(陣列位置)的Entry物件,使用了紅黑樹來儲存,從而大大加速了其查詢效率。

小結:HashMap比HashTable出現的晚。初始化容量和擴容方式不同。
HashTable 11 2n+1 奇數、素數,
HashMap 16 2n 便於位運算,生成hashcode更高效。但存在雜湊衝突問題。

二者功能基本一致,均實現了Map、Cloneable、Serializable介面。HashTable HashTable繼承自抽象類Dictionary,但是Dictionary類已經被廢棄了。多出的兩個功能elements(繼承自Dictionary類,被廢棄不用),contains(和containsValue方法一樣)。

HashTable給方法都加了鎖,但HashMap可以利用Collections工具類裡面的**方法,給類物件加鎖,從而保證執行緒安全。jdk1.8引入了紅黑樹來提高查詢效率。