Java數據結構和算法(一)數組
分類
基本類型數組
對象數組
初始化
靜態初始化
動態初始化
public static void main(String[] args) {
//動態初始化 只指定數組長度,由系統分配初始值,初始值根據定義的數據類型來
int[] numbers = new int[4];
numbers[0] = 1;
for (int i : numbers) {
System.out.println(i);
}
System.out.println("---------------");
//靜態初始化 在定義時就指定數組元素的值,此時不能指定數組長度
numbers = new int[] {1,2,3,6};
for (int i : numbers) {
System.out.println(i);
}
}
1
0
0
0
1
2
3
6
存儲
- 數組中的元素在內存中連續存儲的,可以根據是下標快速訪問元素,因此,查詢速度很快,然而插入和刪除時,需要對元素移動空間,比較慢.
-
基本數據類型
-
對象類型
public static void main(String[] args) {
//靜態定義一個數組
Person[] persons;
//分配內存空間
persons = new Person[2];
Person p1 = new Person();
p1.age=10;
p1.name="zs";
Person p2 = new Person();
p2.age=20;
p2.name="ls";
for (Person person : persons) {
System.out.println(person);//null 由於還未給數組引用變量的null對象賦值
}
persons[0] = p1;
persons[1] = p2;
for (Person person : persons) {
person.show();
}
}
數組爲何比鏈表查詢快?
尋址操作次數鏈表要多一些。數組只需對 [基地址+元素大小*k] 就能找到第k個元素的地址,對其取地址就能獲得該元素。鏈表要獲得第k個元素,首先要在其第k-1個元素尋找到其next指針偏移,再將next指針作爲地址獲得值,這樣就要從第一個元素找起,多了多步尋址操作,當數據量大且其它操作較少時,這就有差距了。
例如 a[3] = 基地址+sizeof(int )*3 直接能找到a[3]的地址
使用場景
頻繁查詢,很少增加和刪除的情況。