1 數組 2 棧 3 隊列 4 鏈表 5 樹 6 堆 7 圖 8 散列表 ...
JAVA數據結構有8種,如下所示,以下從使用場景,優缺點方面講解。
1 數組Array
使用場景:有序的存儲同一類型數據的集合,固定大小
優點:通過索引查找方便
缺點:插入或刪除一個值時,改變值之後的索引都需要更新,故操作複雜;其次,由於大小固定,造成了設置過大記憶體浪費,設置過小又不能滿足存儲要求。
Array
2 棧stack
使用場景:限定僅在表尾進行插入或是刪除的線性表,先進後出
3 隊列queue
Queue包路徑java.util.Queue,是一個介面,父類Collection,常用方法有
add offer remove poll element peek
4 鏈表list
使用場景:存儲可變空間的非連續非順序的一類數據。
缺點:訪問時或是插入刪除鏈表中間值,需要遍歷鏈表,耗時多。
ArrayList包路徑java.util.ArrayList,預設初始容量10,採用數組形式保存數據。
缺點:每插入一條數據,需要更新插入點以及之後的所有數據的索引號,以及計算大小。
LinkedList將對象保存在獨立的記憶體空間中,同時每個空間還保存下一個鏈接的索引。
使用場景:批量隨機插入或刪除數據。
缺點:由於查找需要從第一個索引開始,故查找效率低;由於每個節點存儲了兩個引用,故記憶體占用大
5 樹tree
6 堆heap
7 圖graph
8 散列表hash
使用場景:根據關鍵碼值進行訪問的數據結構。
HashMap包路徑java.util.HashMap,線程非安全。預設初始容量16,載入因數0.75,每一個存入的對象都有一個特定的哈希值。碰撞問題:當hashcode相同時碰撞發生了。
Hashtable
HashSet
ConcurrentHashMap包路徑java.util.concurrent。線程安全,引入了分段鎖,為併發hashmap,預設容量16,載入因數0.75,預設併發數16,即最多同時有16條線程操作這個map,