Java集合入门总结
1.集合容器的概述
2.Collection接口
3.List接口
4.Set接口
5.Map接口
1.集合容器的概述
1.1.什么是集合
集合框架:用于存儲數據的容器。
集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。
任何集合框架都包含三大塊內容: 對外的接口、接口的實現和對集合運算的算法
集合框架通過提供有用的數據結構和算法使你能集中注意力于你的程序的重要部分上,而不是為了讓程序能正常運轉而將注意力于低層設計上。
通過這些在無關API之間的簡易的互用性,使你免除了為改編對象或轉換代碼以便聯合這些API而去寫大量的代碼。 它提高了程序速度和質量。
1.2.集合的特點:
1.對象封裝數據,對象多了也需要存儲。集合用于存儲對象。
2.對象的個數確定可以使用數組,對象的個數不確定的可以用集合。因為 集合是可變長度的。
1.3.使用集合框架的好處
1.容量自增長;
2.提供了高性能的數據結構和算法,使編碼更輕松,提高了程序速度和質量;
3.允許不同 API 之間的互操作,API之間可以來回傳遞集合;
4.可以方便地擴展或改寫集合,提高代碼復用性和可操作性。
5.通過使用JDK自帶的集合類,可以降低代碼維護和學習新API成本。
1.4.常用常用的集合類
Map接口和Collection接口是所有集合框架的父接口
- 1.Collection接口的子接口包括:Set接口和List接口
- 2.Map接口的實現類主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
- 3.Set接口的實現類主要有:HashSet、TreeSet、LinkedHashSet等
- 4.List接口的實現類主要有:ArrayList、LinkedList、Stack以及Vector等
1.5.集合框架底層數據結構
| Arraylist | Object數組 |
| Vector | Object數組 |
| LinkedList | 雙向循環鏈表 |
| HashSet(無序,唯一) | 基于 HashMap 實現的,底層采用 HashMap 來保存元素 |
| LinkedHashSet | LinkedHashSet 繼承與 HashSet,并且其內部是通過 LinkedHashMap 來實現的。有點類似于我們之前說的LinkedHashMap 其內部是基于 Hashmap 實現一樣,不過還是有一點點區別的。 |
| TreeSet(有序,唯一) | 紅黑樹(自平衡的排序二叉樹。) |
| HashMap | DK1.8之前HashMap由數組+鏈表組成的,數組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突).JDK1.8以后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉化為紅黑樹,以減少搜索時間 |
| LinkedHashMap | LinkedHashMap 繼承自 HashMap,所以它的底層仍然是基于拉鏈式散列結構即由數組和鏈表或紅黑樹組成。另外,LinkedHashMap 在上面結構的基礎上,增加了一條雙向鏈表,使得上面的結構可以保持鍵值對的插入順序。同時通過對鏈表進行相應的操作,實現了訪問順序相關邏輯。 |
| HashTable | 數組+鏈表組成的,數組是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的 |
| TreeMap | 紅黑樹(自平衡的排序二叉樹) |
1.8.集合和數組的區別
3.List接口
3.1特點
java.util.List接口繼承自Collection接口,在List集合元素可重復、元素有序。所有的元素是以一種線性方式進行存儲的,在程序中可以通過索引來訪問集合中的指定元素,而且元素的存入順序和取出順序一致。
3.2List里邊常用的方法:
3.3List的子類
1.ArrayList集合
(1)特點:
java.util.ArrayList集合數據存儲的結構是數組結構。元素增刪慢,查找快,由于日常開發中使用最多的功能為查詢數據、遍歷數據,所以ArrayList是最常用的集合。
(2)優缺點:
ArrayList的優點如下:
ArrayList 底層以數組實現,是一種隨機訪問模式。ArrayList 實現了 RandomAccess 接口,因此查找的時候非常快。
ArrayList 在順序添加一個元素的時候非常方便。
ArrayList 的缺點如下:
刪除元素的時候,需要做一次元素復制操作。如果要復制的元素很多,那么就會比較耗費性能。
插入元素的時候,也需要做一次元素復制操作,缺點同上。
ArrayList 比較適合順序添加、隨機訪問的場景。
深入了解看:ArrayList集合源碼詳解
2.LinkedList集合
(1)特點:
java.util.LinkedList集合數據存儲的結構是鏈表結構。元素增刪快,查找慢的集合
詳細看:LinkedList集合詳解
3.ArrayList和LinkedList對比:
4.List三種遍歷方式
(1)第一種for循環
基于計數器。在集合外部維護一個計數器,然后依次讀取每一個位置的元素,當讀取到最后一個元素后停止
package untl; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MyObject {public static void main(String[] args) {List<String> list=new ArrayList();Collections.addAll(list,"aaa","bbb","ccc","ddd");for (int i = 0; i <list.size() ; i++) {System.out.println(list.get(i));}} } 運行結果: aaa bbb ccc ddd(2).第二種foreach循環
foreach 內部也是采用了 Iterator 的方式實現,使用時不需要顯式聲明 Iterator 或計數器。優點是代碼簡潔,不易出錯;缺點是只能做簡單的遍歷,不能在遍歷過程中操作數據集合,例如刪除、替換。
package untl; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MyObject {public static void main(String[] args) {List<String> list=new ArrayList();Collections.addAll(list,"aaa","bbb","ccc","ddd");for (String str:list) {System.out.println(str);}} } aaa bbb ccc ddd(3).第三種迭代器Iterator
Iterator 是面向對象的一個設計模式,目的是屏蔽不同數據集合的特點,統一遍歷集合的接口。Java 在 Collections 中支持了 Iterator 模式。
package untl; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; public class MyObject {public static void main(String[] args) {List<String> list=new ArrayList();Collections.addAll(list,"aaa","bbb","ccc","ddd");for (Iterator<String> iterator=list.iterator();iterator.hasNext();){String str=iterator.next();System.out.println(str);}} } 運行結果: aaa bbb ccc ddd5.List子類與數組之間相互轉換
數組轉 List:使用 Arrays. asList(array) 進行轉換。
List 轉數組:使用 List 自帶的 toArray() 方法。
例子:
package untl; import java.util.*; public class MyObject {public static void main(String[] args) {List<String> list1=new ArrayList<String>();Collections.addAll(list1,"aaa","bbb","ccc","ddd");Object arr[] = list1.toArray();//這里返回Object類型數組for (Object str:arr){System.out.println(str);}System.out.println("---------------------------------------------");List list2= Arrays.asList(arr);for (Iterator<String> iterator=list2.iterator();iterator.hasNext();){String str=iterator.next();System.out.println(str);}} } 運行結果: aaa bbb ccc ddd --------------------------------------------- aaa bbb ccc ddd4.Set接口
4.1set接口特點
java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了。與List接口不同的是,Set接口中元素無序且不重復,剛好全與list相反,set會以某種規則保證存入的元素不出現重復。
4.2set接口常用方法
4.3Set接口的子類
1.HashSet
java.util.HashSet是Set接口的一個實現類,它所存儲的元素是不可重復、無序(即存取順序不一致)。java.util.HashSet底層的實現其實是一個java.util.HashMap支持。
詳細看:HashSet詳解
5.Map接口
5.1Map接口的特點:
Map 是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。 Map沒有繼承于Collection接口,從Map集合中檢索元素時,只要給出鍵對象,就會返回對應的值對象。
5.2Map接口的常用方法:
5.3Map接口的子類:
1.HashMap
詳細看:HashMap詳解
2.LinkedHashMap
詳細看:LinkedHashMap詳解
3.TreeMap
詳細看:TreeMap詳解
總結
以上是生活随笔為你收集整理的Java集合入门总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java集合 LinkedList的原理
- 下一篇: 34篇Java基础总结博客陪博主入门Ja