Java日常學習之集合

2020-10-07 16:04:04

Java日常學習之集合


以下是本篇文章正文內容,下面內容為自己日常學習總結,可能有些地方不太全面,望諒解


一、集合及其應用環境

Java集合類存放在java.util包中,是一個用來存放物件的容器。

 注意:
    ①集合只能存放物件,不能放基本的資料型別。

Integer等即為物件

    ②集合存放的都是物件的參照,而非物件本身。
    ③集合可以存放不同型別,不限數量的資料型別。

適用環境:

 當我們需要將一些相同結構的個體整合在一起時,就可以考慮使用集合了。


二、集合和陣列的對比

相似點:

  • 都可以儲存多個物件,對外作為一個整體存在

陣列的缺點:

  • 長度必須在初始化時指定,且固定不變
  • 陣列採用連續儲存空間,刪除和新增效率低下
  • 陣列無法直接儲存對映關係
  • 陣列缺乏封裝,操作繁瑣

三、集合架構和分類

虛線框為介面


  • Collect 介面儲存物件的特徵為不唯一,無序
  • List介面儲存物件的特徵為不唯一,有序(索引順序)
  • Set介面儲存物件的特徵為唯一,無序
  • Map介面儲存一組鍵值對,key 唯一 無序,value 不唯一 無序

以下將不再複述他們的特徵

1.List

  • ArrayList

      特性:	
       	線性表中的順序表
       	實現長度可變陣列
      
      特徵:
      	按索引遍歷元素和隨機存取速率快	新增和刪除難	
    
  • LinkedList

      特性:	
       	線性雙向連結串列
       	遍歷和隨機存取元素效率低
      
      特徵:
      	新增和刪除效率高		遍歷和存取效率低
    

線性雙向連結串列


  • 常用指令

     獲取元素				 get(位置)
     新增元素到指定位置		 add(位置,值)
     新增多個元素 			 addAll
     遍歷輸出		  		 toString
     修改指定位置值			 set(位置,值)
     刪除 					 remove(位置)
    
  • 綜述:

      ArrayList         隨機存取多用
      LinkedList		新增和刪除多,增加了對首尾的操作
    

2.Set

  • HashSet

      特性:	
       	採用Hashtable儲存結構	
       	
      特徵:
      	新增、查詢和刪除速度快
      	無序	
    

hash 基於計算,直接計算到地址
步驟:①計算雜湊碼 ②計算儲存位置 ③存入指定位置

  • LinkedHashSet

      特性:	
       	採用雜湊儲存結構,同時使用連結串列維護次序
      
      特徵:
      	有序
    
  • TreeSet

      特性:	
       	採用二元樹(紅黑樹)的儲存結構
      
      特徵:
      	有序 查詢速度比List快(按內容查詢)
      	查詢速度沒有HashSet快
    

按內容查詢速度:線性表 > 樹 > 雜湊表

3.Map

  • HashMap

      特性:	
       	key   無序 唯一 (Set)	
       	Value 無序 不唯一 (Collection)
    
  • LinkedHashMap

      特性:	
      	底層結構是hash+連結串列
       	key 有序(新增順序) 唯一 LinkedHashSet
       	value 無序 不唯一 Collection
    
  • TreeMap

      特性:	
       	底層結構是紅黑樹
       	key 有序(自然順序) 唯一
       	value 無序 不唯一 Collection
    
  • 常用指令

     獲取相應元素的值			 get("鍵值")
     新增元素到指定位置		 add(位置,值)
     鍵值					 keySet()
     清除					 clear()
    
  • Map遍歷

Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while (it.hasNext()){
            Entry<String,String> entry = it.next();
            System.out.print(entry.getKey());
        }

map中沒有迭代器所以要進行遍歷時,先得到所有的key-value組成的set,再進行遍歷set

entrySet()返回對映所包含的對映關係的Set集合(一個關係就是鍵值對)

四、補充

泛型
   可以規定其所加型別
   例:ArrayList<Integer(或自定型別)> list = new ArrayList();
   改善集合的安全性和方便性,無需考慮新增元素是否一致,加入或取出無需強轉

集合中的遍歷
    for
    foreach
    Iterator(Map中不可用)


謝謝觀看!