1. 程式人生 > 實用技巧 >Java基礎-集合框架

Java基礎-集合框架

一、集合
集合看做一個容器,用來存放物件資訊,所有的集合都位於java.util包下
二、陣列和集合
陣列存放資料型別是相同的:基本資料型別的資料,物件
集合可以存放不同型別的資料:只能儲存物件
三、集合包含的主要介面:Collection介面和Map介面
1.Collection介面
①.List介面:儲存有序的,可以重複的元素
–ArrayList:主要實現類
–LinkedList:基於連結串列的實現方式,主要用於頻繁的插入、刪除操作
②.Set介面:儲存無序的,不可重複的元素(新增相同元素只能儲存一份)
–HashSet:主要實現類
–LinkedHashSet:HashSet一個子類,具有hashset的特性,是根據元素的hashcode值來決定元素的儲存順序的

–TreeSet:是SortedSet介面的實現類,可以保證排序元素處於排序狀態(預設是自然排序)
自然排序:TreeSet會呼叫集合元素的CompareTo(Object)方法比較元素的大小關係,然後將元素按照升序排序
2.Map介面:資料以鍵值對<key,value>的方式進行儲存
key:不可重複的,使用set儲存
value:可以重複,使用Collection儲存
實現類:
HashMap
LinkedHashMap
TreeMap
HashTable

Collection coll = new ArrayList(); --介面指向實現類
–如果存入的集合元素是自定義物件,需要重寫hashcode()和equals()

方法:add,size,addAll(Collection coll),isEmpty()判斷集合是否為空,clear()清空集合元素
contains(Object o):判斷集合中是否包含指定的元素,remove(Object o) :刪除集合中的元素,toArray() 將集合轉化為陣列,removeAll(Collection c):從當前集合中刪除另外一個集合(https://blog.csdn.net/Tracycater/article/details/60955299?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param)
遍歷集合:
1.迭代器Iterator實現集合遍歷 2.增強for迴圈 3.for迴圈

List介面:
Collection介面的子介面,List是有序集合,可以儲存相同的元素,儲存元素和取出元素的順序一致
有索引,包含了一些帶索引的方法(底層實現是使用陣列,它是一個可變陣列)
方法:add()
add(int index, Object ele):在指定的索引位置新增元素
addAll(int index, Collection coll):在指定的索引位置新增一個集合
get(int index):獲取指定索引位置的元素
indexOf(Object o):返回o在集合中首次出現的所以位置,沒有找到返回-1
lastIndexOf(Object obj):返回obj在集合中最後一次出現的索引位置,如果沒有找到索引,則返回-1
remove(int index):刪除指定索引位置的元素
set(int index, Object ele):設定指定索引位置的元素(update)
List集合中常用的實現類
1.ArrayList(重要)
①.底層實現是使用陣列的方式來實現(動態陣列),允許包含所有的元素型別(null)
②.可以根據索引位置對集合進行快速的隨機訪問(優點)
③.向指定索引的位置插入元素或者刪除元素速度比較慢(缺點)
2.LinkedList
①.底層實現是採用雙向連結串列的方式來操作資料(通過next和prev可以移動指標)
②.便於向集合中插入和刪除元素,效率非常高(優點)
③.使用連結串列的形式操作資料,訪問速度是比較慢(缺點)

ArrayList和LinkedList
1.ArrayList是基於陣列的方式實現,LinkedList是基於雙向連結串列的資料結構實現,這是兩種不同的技術,決定了各自的應用場景
2.對於隨機訪問get和set,ArrayList優於LinkedList,因為LinkedList要移動指標
3.對於頻繁的新增和刪除操作(add,remove),LinkedList優於ArrayList,因為ArrayList要移動資料

Map介面:Map是用於儲存具有對映關係的資料,Map中儲存著兩組值(一組是key,一組是vaue)
優點:類似於字典一樣通過Key可以得到對應的value,使用這種對映關係方便查詢資料
①.key:Map中的鍵 它是不能重複的,底層採用的技術是Set
②.value:Map中的值 它是可以重複的,底層實現採用Collection(List)
③.Map實際上是提供了一個Entry內部類封裝了key-value
內部類 Map.Entry
①.Map中包含一個內部類Entry,它是封裝了一個鍵值對
②.常用方法
– getKey()
– getValue()
Map的常用方法
Object put(Object key,Object value):新增元素|更新元素
Object remove(Object key):移動元素 刪除一個key-value
void putAll(Map t):新增一個Map元素
void clear():清空元素
Object get(Object key):根據key獲得指定的value,如果沒有找到對應的key,則返回null
boolean containsKey(Object key):是否包含指定的key 如果包含則返回true,如果不包含返回是false
boolean containsValue(Object value):是否包含指定的value
int size():集合長度
boolean isEmpty():是否為空
boolean equals(Object obj)
Set keySet():返回Map所有key組成的集合Set
Collection values():返回Map所有的value組成的集合 Collection
Set entrySet():返回Map中所有的鍵值對組成的集合(每個集合元素又是Entry物件)

Set集合:Set介面繼承與Collection,儲存的資料是無序的(內部有序,外部無序),不可重複的
新增進set中的元素一定要重寫equals和hashCode()方法
–set中元素的儲存使用的是雜湊演算法,當向set中新增元素時,首先會呼叫該物件所在類的hashcode方法計算雜湊值,計算後的雜湊值決定了元素在set中的儲存位置。再通過equals方法比較兩個物件是否相同,如果相同,則後面的物件不能新增,如果不同,則都可以新增
實現類:
HashSet(主要實現類) LinkedHashSet(基於連結串列的實現方式) TreeSet(採用排序的方式)
HashSet:採用雜湊演算法儲存集合的元素,更利於儲存和查詢(底層資料結構是雜湊表)
雜湊表:綜合了陣列和連結串列的優點,可以看做一個連結串列的陣列
HashSet不能保證元素的排列順序,順序和新增的順序是不一致的
內部儲存機制:HashSet集合判斷兩個元素是相同物件的標準:通過equals方法比較相等,並且兩個物件的hashCode值也是相同的
為什麼不適用陣列而使用HashSet?
HashSet通過雜湊值確定儲存位置,可以自由的增加長度,並根據雜湊值訪問元素,不用挨個遍歷索引去訪問
LinkedHashSet:輸出集合元素時元素順序和新增順序是一致的
List和Set區別(面試題)
①.List和Set都是Collection介面的子介面
②.List是儲存有序的 可以重複的資料
③.Set是儲存無序的 不可重複的資料
④.底層儲存機制不同

在這裡插入圖片描述