數組:
.長度固定
.可以存儲基本類型,也可以存儲引用類型
.存儲元素類型一致
數組可以在內存中連續存儲多個元素的構造,在內存中的分配也是連續的
數組中的元素通過數組的下標進行訪問的,下標從0開始的
優點 :
按照索引查詢元素速度快
按照索引遍歷數組方便
缺點:
數組的大小固定后就不能擴容了
數組只能存儲一種類型的數據
添加,刪除的操作慢,因為要移動其他的元素
適用場景:
頻繁查詢,對存儲空間要求不大,很少增加和刪除的情況
集合:
特點
長度可變
只可以存儲引用類型
可以存儲多種類型
List:有序、可以有重復的集合
List 接口的三個典型實現:
①、List list1 = new ArrayList();
底層數據結構是數組,查詢快,增刪慢;線程不安全,效率高
②、List list2 = new Vector();
底層數據結構是數組,查詢快,增刪慢;線程安全,效率低,幾乎已經淘汰了這個集合
③、List list3 = new LinkedList();
底層數據結構是鏈表,查詢慢,增刪快;線程不安全,效率高
Set
HashSet:要保證元素唯一性,需要覆蓋掉Object中的equals和hashCode方法(因為底層是通過這兩個方法來判斷兩個元素是否是同一個)。
**TreeSet:**以二叉樹的結構對元素進行存儲,可以對元素進行排序。
排序的兩種方式:
1、元素自身具備比較功能,元素實現Comparable接口,覆蓋compareTo方法。
2、建立一個比較器對象,該對象實現Comparator接口,覆蓋compare方法,並將該對象作為參數傳給TreeSet的構造函數(可以用匿名內部類)。
Map接口其特點是:元素是成對出現的,以鍵和值的形式體現出來,鍵要保證唯一性:常用類有:HashMap,Hashtable ,TreeMap。
HashMap:線程不安全等的,允許存放null鍵null值。
Hashtable:線程安全的,不允許存放null鍵null值。
TreeMap:可以對鍵進行排序(要實現排序方法同TreeSet)。
鏈表:
通過一個鏈子把多個結點(元素)連接起來,由數據和地址組成的一個元素,
節點本身必須有一個地址值(就是下一個元素的地址值)
優點:
鏈表是很常用的一種數據結構,不需要初始化容量,
可以任意加減元素;
添加或者刪除元素時只需要改變前后兩個元素結點的指針域指向地址即可,
所以添加,刪除很快;
缺點:
因為含有大量的指針域,占用空間較大;
查找元素需要遍歷鏈表來查找,
非常耗時。
適用場景:
數據量較小,需要頻繁增加,刪除操作的場景
隊列:
是一種先進先出的數據構造,也是運算受限制的線性表,只可以在對頭刪除元素,在隊尾插入元素
線性表是同一類型數據的一個有限序列
元素之間的先后排列次序蘊涵着其線性關系。線性表中的第一個元素a1稱為表頭元素,an稱為表尾元素
隊列可以分為順序隊列和鏈式隊列,根據不同的存儲方式,定義的結構也不同。
順序隊列包含一個數組成員,有二端包含一個數組成員 我們把刪除一端叫頭
插入一端叫尾
鏈接存儲的有序線性表類需要繼承鏈接線性表類LinkList和實現有序線性表接口SortedList
區別:
1.占用的內存空間
鏈表存放的內存空間可以是連續的,也可以是不連續的,數組則是連續的一段內存空間。一般情況下存放相同多的數據數組占用較小的內存,而鏈表還需要存放其前驅和后繼的空間。
2.長度的可變性
鏈表的長度是按實際需要可以伸縮的,而數組的長度是在定義時要給定的,如果存放的數據個數超過了數組的初始大小,則會出現溢出現象。
3.對數據的訪問
鏈表方便數據的移動而訪問數據比較麻煩;數組訪問數據很快捷而移動數據比較麻煩。
鏈表和數組的差異決定了它們的不同使用場景,如果需要很多對數據的訪問,則適合使用數組;如果需要對數據進行很多移位操作,則設和使用鏈表。