【Java筆記】高級教程之常見的數據結構的Java實現

對於數據結構的學習不單單需要知道各種數據結構的優缺點和應用場景,對於數據結構的源碼和算法也是蘊含着很多可以學習的東西。
這裏寫圖片描述

1、Map(映射類)

Map是按照Key-Value進行存儲的數據結構,主要實現有HashMap,LinkedHashMap,TreeMap,

在不需要保證元素的順序情況下,HashMap是非常高效的,主要是通過hashCode()和equal()方法進行哈希化存儲的,所以要求存儲的對象要實現hashCode()和equal()方法才能提高性能。HashMap具體的內部機制可以看
高爽|Coder的HashMap深度解析

而LinkedHashMap可以保證存儲元素的順序;可以按照元素的存儲順序或者元素的訪問順序進行排序存儲,它的底層是由HashMap加上循環雙向鏈表實現的。其中LinkedHashMap的具體機制可以看 LinkedHashMap及其源碼分析

TreeMap在遍歷排序好的鍵值是非常高效率的,默認是按照元素的實現Comprable接口方法進行排序的,也可以傳入Comparator比較器接口進行比較排序
以下是TreeMap的put(K key, V value)源碼分析

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}

2、List(列表)

List列表允許存儲相同元素,插入元素和按照下標獲取元素方便,具體實現有ArrayList,LinkedList和Vector,

ArrayList底層基於數組實現的,按順序存儲元素以及快速按照元素下標進行獲取元素,不可同步的;

而Vector底層也是數組,可進行同步操作,在多線程環境下可以使用。使用Vector類最主要的好處就是在創建對象的時候不必給對象指定大小,它的大小會根據需要動態的變化。;

LinkedList鏈表的具體機制如下圖:可以在具體下標位置刪除和添加元素,在許多需要根據具體下標添加和刪除元素的應用場景下比ArrayList有更好的性能。

綜上:Array List在不需要同步操作及不需要頻繁刪除任意下標的元素時推薦使用,Vector是在同步場景下使用,LinkedList是在需要頻繁刪除和添加任意下標的元素時使用

3、Set(規則集)

散列集,不能保證存儲元素的順序,保證存儲元素的不可重複性。具體實現由HashSet,LinkedHashSet,TreeSet,

HashSet是哈希散列集,底層由HashMap支持的,主要使用hashCode()和equal()方法確保Key值不可重複性來保證元素的唯一性

LinkedHashSet底層由LinkedHashMap,則可以保證按照元素插入規則集的順序進行提取。

TreeSet底層是由TreeMap支持的,可以按照Comparable接口對存儲對象排序或者Comparator比較器接口進行存儲對象的比較排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章