日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java集合入门总结

發(fā)布時間:2024/10/14 132 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合入门总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.集合容器的概述
2.Collection接口
3.List接口
4.Set接口
5.Map接口

1.集合容器的概述

1.1.什么是集合

集合框架:用于存儲數(shù)據(jù)的容器。
集合框架是為表示和操作集合而規(guī)定的一種統(tǒng)一的標準的體系結(jié)構(gòu)。
任何集合框架都包含三大塊內(nèi)容: 對外的接口、接口的實現(xiàn)和對集合運算的算法

集合框架通過提供有用的數(shù)據(jù)結(jié)構(gòu)和算法使你能集中注意力于你的程序的重要部分上,而不是為了讓程序能正常運轉(zhuǎn)而將注意力于低層設(shè)計上。
通過這些在無關(guān)API之間的簡易的互用性,使你免除了為改編對象或轉(zhuǎn)換代碼以便聯(lián)合這些API而去寫大量的代碼。 它提高了程序速度和質(zhì)量。

1.2.集合的特點:

1.對象封裝數(shù)據(jù),對象多了也需要存儲。集合用于存儲對象。
2.對象的個數(shù)確定可以使用數(shù)組,對象的個數(shù)不確定的可以用集合。因為 集合是可變長度的

1.3.使用集合框架的好處

1.容量自增長;
2.提供了高性能的數(shù)據(jù)結(jié)構(gòu)和算法,使編碼更輕松,提高了程序速度和質(zhì)量;
3.允許不同 API 之間的互操作,API之間可以來回傳遞集合;
4.可以方便地擴展或改寫集合,提高代碼復(fù)用性和可操作性。
5.通過使用JDK自帶的集合類,可以降低代碼維護和學(xué)習(xí)新API成本。

1.4.常用常用的集合類

Map接口和Collection接口是所有集合框架的父接口

  • 1.Collection接口的子接口包括:Set接口和List接口
  • 2.Map接口的實現(xiàn)類主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
  • 3.Set接口的實現(xiàn)類主要有:HashSet、TreeSet、LinkedHashSet等
  • 4.List接口的實現(xiàn)類主要有:ArrayList、LinkedList、Stack以及Vector等
參考下面者個圖(博主只畫出了相對重要的):

1.5.集合框架底層數(shù)據(jù)結(jié)構(gòu)
集合底層原理
ArraylistObject數(shù)組
VectorObject數(shù)組
LinkedList雙向循環(huán)鏈表
HashSet(無序,唯一)基于 HashMap 實現(xiàn)的,底層采用 HashMap 來保存元素
LinkedHashSetLinkedHashSet 繼承與 HashSet,并且其內(nèi)部是通過 LinkedHashMap 來實現(xiàn)的。有點類似于我們之前說的LinkedHashMap 其內(nèi)部是基于 Hashmap 實現(xiàn)一樣,不過還是有一點點區(qū)別的。
TreeSet(有序,唯一)紅黑樹(自平衡的排序二叉樹。)
HashMapDK1.8之前HashMap由數(shù)組+鏈表組成的,數(shù)組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突).JDK1.8以后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時間
LinkedHashMapLinkedHashMap 繼承自 HashMap,所以它的底層仍然是基于拉鏈式散列結(jié)構(gòu)即由數(shù)組和鏈表或紅黑樹組成。另外,LinkedHashMap 在上面結(jié)構(gòu)的基礎(chǔ)上,增加了一條雙向鏈表,使得上面的結(jié)構(gòu)可以保持鍵值對的插入順序。同時通過對鏈表進行相應(yīng)的操作,實現(xiàn)了訪問順序相關(guān)邏輯。
HashTable數(shù)組+鏈表組成的,數(shù)組是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的
TreeMap紅黑樹(自平衡的排序二叉樹)
1.8.集合和數(shù)組的區(qū)別

3.List接口

3.1特點

java.util.List接口繼承自Collection接口,在List集合元素可重復(fù)、元素有序。所有的元素是以一種線性方式進行存儲的,在程序中可以通過索引來訪問集合中的指定元素,而且元素的存入順序和取出順序一致。

3.2List里邊常用的方法:

3.3List的子類

1.ArrayList集合
(1)特點:

java.util.ArrayList集合數(shù)據(jù)存儲的結(jié)構(gòu)是數(shù)組結(jié)構(gòu)元素增刪慢,查找快,由于日常開發(fā)中使用最多的功能為查詢數(shù)據(jù)、遍歷數(shù)據(jù),所以ArrayList是最常用的集合。

(2)優(yōu)缺點:

ArrayList的優(yōu)點如下:

ArrayList 底層以數(shù)組實現(xiàn),是一種隨機訪問模式。ArrayList 實現(xiàn)了 RandomAccess 接口,因此查找的時候非常快。
ArrayList 在順序添加一個元素的時候非常方便。

ArrayList 的缺點如下:

刪除元素的時候,需要做一次元素復(fù)制操作。如果要復(fù)制的元素很多,那么就會比較耗費性能。
插入元素的時候,也需要做一次元素復(fù)制操作,缺點同上。
ArrayList 比較適合順序添加、隨機訪問的場景。

深入了解看:ArrayList集合源碼詳解
2.LinkedList集合
(1)特點:

java.util.LinkedList集合數(shù)據(jù)存儲的結(jié)構(gòu)是鏈表結(jié)構(gòu)元素增刪快,查找慢的集合


詳細看:LinkedList集合詳解
3.ArrayList和LinkedList對比:

4.List三種遍歷方式


(1)第一種for循環(huán)

基于計數(shù)器。在集合外部維護一個計數(shù)器,然后依次讀取每一個位置的元素,當讀取到最后一個元素后停止

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));}} } 運行結(jié)果: aaa bbb ccc ddd

(2).第二種foreach循環(huán)

foreach 內(nèi)部也是采用了 Iterator 的方式實現(xiàn),使用時不需要顯式聲明 Iterator 或計數(shù)器。優(yōu)點是代碼簡潔,不易出錯;缺點是只能做簡單的遍歷,不能在遍歷過程中操作數(shù)據(jù)集合,例如刪除、替換。

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 是面向?qū)ο蟮囊粋€設(shè)計模式,目的是屏蔽不同數(shù)據(jù)集合的特點,統(tǒng)一遍歷集合的接口。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);}} } 運行結(jié)果: aaa bbb ccc ddd

5.List子類與數(shù)組之間相互轉(zhuǎn)換

數(shù)組轉(zhuǎn) List:使用 Arrays. asList(array) 進行轉(zhuǎn)換。
List 轉(zhuǎn)數(shù)組:使用 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類型數(shù)組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);}} } 運行結(jié)果: aaa bbb ccc ddd --------------------------------------------- aaa bbb ccc ddd

4.Set接口

4.1set接口特點

java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了。與List接口不同的是,Set接口中元素?zé)o序且不重復(fù),剛好全與list相反,set會以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。

4.2set接口常用方法

4.3Set接口的子類

1.HashSet

java.util.HashSet是Set接口的一個實現(xiàn)類,它所存儲的元素是不可重復(fù)、無序(即存取順序不一致)。java.util.HashSet底層的實現(xiàn)其實是一個java.util.HashMap支持。

詳細看:HashSet詳解

5.Map接口

5.1Map接口的特點:

Map 是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。 Map沒有繼承于Collection接口,從Map集合中檢索元素時,只要給出鍵對象,就會返回對應(yīng)的值對象。

5.2Map接口的常用方法:

5.3Map接口的子類:

1.HashMap
詳細看:HashMap詳解

2.LinkedHashMap
詳細看:LinkedHashMap詳解

3.TreeMap
詳細看:TreeMap詳解

總結(jié)

以上是生活随笔為你收集整理的Java集合入门总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。