【JavaSE_06】Java中的数组(array)
#1.什么是數組?
顧名思義,即為數據的組合或集合,數組就是用來表示一組數據的。
比如沒有數組之前,我們要存儲多個姓名的信息
String name1;
String name2;
String name3;
有了數組之后,我們可以這樣
String[] names;
#2.數組的特點:
(1)數組是用來存儲一組相同數據類型的數據結構。
(2)數組中的元素可以是任何數據類型(基本類型和引用類型)。
int[] ints
double[] doubles
String[] names
(3)數組有一個對應的索引,可以通過索引訪問數組中的每個元素。(0 –-- n-1)
(4)數組被創建好之后,它的大小(數組長度)是不能改變的,但是數組中的各個元素是可以被改變的。
int[] ages = {1,2,3,4,5,6};
總結:
(5)數組變量屬于引用數據類型。// 所有的任何數組都是繼承了Object
int[] a ; a是引用數據類型(關于引用數據類型的細節,面向對象部分再來補充說明)
#3.掌握數組的基本用法
##3.1.一維數組的聲明
一維數組聲明有兩種方式:
數據類型 變量名 = 變量值
數據類型[] 數組變量名;(推薦)
數據類型 數組變量名[];
注意:聲明數組時不能指定數組長度。例如下面寫法是錯誤的。
int[5] array;//語法錯誤,編譯不通過。
int[] array;//正確寫法
##3.2.一維數組的創建
一維數組的創建,采用new來申請內存空間
Java中使用關鍵字new 創建數組對象,指定數組的大小,給數組元素的存儲分配空間
格式:數組變量名 = new 數組元素的類型 [數組元素的個數];
array = new int[5];
例如:
int[] a; //聲明一個int類型的數組
a = new int[5]; //創建一個int類型的數組,長度為5(存儲5個int整數的數組),并讓變量a指向該數組;
##3.3.一維數組的賦值
靜態初始化是指,在創建數組對象的同時對數組進行初始化。
靜態初始化有兩種方式:
1、int[] a = new int[]{1, 2, 3}; //定義并創建數組,并初始化數組的元素為 1、2、3,同時數組的長度也被限定為為3。
2、int[] a = {1, 2, 3}; //效果同上
注意:不能這么寫 int[] a = new int[3]{1,2,3};
以上兩種方式均不需要定義數組的長度,數組的長度由初始化時元素的個數來決定。
動態初始化是指把數組的創建和數組的初始化分開完成。
例如:
int[] a = new int[3];
a[0] = 3; //通過元素索引(下標)來給數組元素賦值
a[1]=4;
a[2]=5;
問題:動態賦值和靜態賦值怎么選擇?
##3.4.訪問數組的元素
通過下標訪問數組元素,上述案例已經有了,注意一點:數組的下標從0開始以及數組的邊界問題
##3.5.一維數組的遍歷
需掌握兩種方式,并知道他們的區別
1,采用最初學習for循環方式,這種方式可以打印出數組的元素
2,采用一種新的循環遍歷方式,增強for循環,這種方式只能輸出數組元素,但訪問不到下標
##3.6.練習1
聲明一個數組,并向其存儲“5,8,1,7,6,19,10,3”這幾個數字,
?分別采用靜態和動態的方式進行數據的初始化
?最后采用兩種循環方式打印出數組的數據。
?創建方法,用于打印數組的元素,方便后續調用
##3.7.練習2
開發一個隨機抽取學員回答問題的程序
##3.8.總結
要求掌握的技能如下:
?數組的聲明及初始化
?數組的遍歷
?數組的下標特點
#4.算法階段(查找+排序)
下面進入算法階段:
分兩個步驟來學習:
第一:分析這種算法的規律(最關鍵)-畫圖來說明
第二:采用程序的方式來描述這種規律
每講完一種算法,練習一次
##4.1.難點一:數組的查找
###4.1.1.順序查找(簡單)
應用場景:數組的元素是沒有順序的,挨個找
###4.1.2.二分法查找
應用場景:二分法查找的前提是數組已經排好序了
查找的策略,就好比我們猜數字游戲的策略。
基本思想:每次都猜中間的那個數字,猜大了或小了,就少了一半的元素,然后繼續猜中間的數字
首先要明確一個查找的規則,就是先假設是中間的數字,如果是,那就找到了。
如果不是,則分兩種情況考慮
–中間的數大了,則繼續取前面一排數字的中間數來比較,規則同上
–中間的數小了,則繼續取后面一排數字的中間數來比較,規則同上
規律是,根據情況,改變的是三個索引的值
min=0;
max=array.length-1;
mid=(max+min)/2;
關鍵條件,循環條件,根據兩種情況來分析和找結論
max>=min
##4.2.求數組的最大數和最小數
?求最大值
?求最小值
public class Test5MaxMin{
public static void main(String[] args){
int[] nums = {1,5,6,11,88,33,99,10,2,-1,-9};
//max
int max = nums[0];
for(int i=1;i<nums.length;i++){
//目的:找比我大的值
if(max < nums[i]){
max = nums[i];
}
}
System.out.println(max);
}
##4.3.難點二:數組的排序
###4.3.1.冒泡排序(最重要)
5,8,1,7,6 ,3
?????8
????7,8
1,3,5,6,7,8
冒泡排序,就是每次比較,大的元素往后挪,比較完第一遍后,最大的元素排到了數組的最后一位
第二次比較,還是從第一個元素開始和后面的比較,把剩余的最大的元素拍到數組的倒數第二位,第一輪比較的最大元素不參與比較
依次類推。
總結:相鄰兩個元素兩兩比較,大的往后挪,第一次比較結束后,最大的元素在數組的最大索引處。
第一步:
int[] source = {5,8,1,7,6 ,3 };
if(source[0]>source[1]){
int temp = source[0];
source[0]=source[1];
source[1]=temp;
}
if(source[1]>source[2]){
int temp = source[1];
source[1]=source[2];
source[2]=temp;
}
第二步:
將上述代碼變成一個循環結構
for(int i=0;i<=nums.length-2;i++){
if(nums[i] > nums[i+1]){
int temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
}
}
第三步:每一次都是在改變臨界條件
for(int i=0;i<=source.length-2-0;i++){//-0是為了總結出后面的外層循環規律
if(source[i]>source[i+1]){
int temp = source[i];
source[i]=source[i+1];
source[i+1]=temp;
}
}
第四步:
再嵌套一層循環來改變這個值
for(int j=0;j<=source.length-2;j++){
for (int i = 0; i <= source.length - 2 - j; i++) {
if (source[i] > source[i + 1]) {
int temp = source[i];
source[i] = source[i + 1];
source[i + 1] = temp;
}
}
}
###4.3.2.選擇排序(選擇一個位置來存放最小的元素)
基本思想:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。
第一輪:
int k = 0;
for(int i=1;i<=ints.length-1;i++){
if(ints[k]>ints[i]){
k = i;
}
}
int temp = ints[0];
ints[0] = ints[k];
ints[k] = temp;
第二輪:
就是將k新增1,即從1開始
k = 1;
for(int i=2;i<=ints.length-1;i++){
if(ints[k]>ints[i]){
k = i;
}
}
temp = ints[1];
ints[1] = ints[k];
ints[k] = temp;
以此類推,所以通過外層循環來控制即可
for(int j=0;j<=ints.length-2;j++){
int k = j;
for(int i=j+1;i<=ints.length-1;i++){
if(ints[k]>ints[i]){
k = i;
}
}
int temp = ints[j];
ints[j] = ints[k];
ints[k] = temp;
}
#5.擴展
?可變參數
?繼續認識main方法–args
?數組專家Arrays
總結
以上是生活随笔為你收集整理的【JavaSE_06】Java中的数组(array)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaSE05】Java中方法与重载
- 下一篇: 【JavaSE_06】Java中的数组(