Java小白入門教程(8)——數組

提綱:

<code>1、方法的概念
2、方法語法
3、方法使用
4、參數
5、返回值
6、方法的分類
7、作業/<code> 

一、數組的概念
1.1、為什麼使用數組

<code>如果說程序中,需要存儲大量的相同類型的一組數據,如果直接使用變量來進行存儲,每個變量只能存儲一個值,就需要大量的變量。
1、代碼過於臃腫
2、程序的可讀性差
3、數據維護較差/<code>

1.2、數組的概念

<code>數組的概念:
就是一組相同數據類型的數據。內存上是開闢的連續的內存空間。/<code>

1.3、數組的特點?

<code>1、定長。容量固定。數組一旦創建後,那麼長度不能更改。(容量,長度,都是指存儲的數量)
2、存儲的數據類型必須都一致。
3、在內存中空間連續挨個。
4、數組是引用類型的數據,存在棧和堆的地址引用關係。

Java中:兩大數據類型
  基本:4類8種
  引用:數組,對象,集合。。。。/<code>

二、數組的使用

2.1、數組的使用

<code>step1:先創建數組
step2:使用數組:存儲數據,訪問數據。/<code>

2.2、數組的語法

<code>創建數組的語法:
  數據類型[] 數組名 = new 數據類型[長度、容量、個數];
  數據類型 數組名[] = new 數據類型[長度];//也可以
  
使用的語法:
  數組名[index],操作數組
  index:因為一個數組存儲了多個數據(也叫元素),每個元素都有一個下標,也叫索引,index。理解起來就是給每個數據排個編號,固定從0開始,0,1,2,3,4.。。。到長度減1。
  數組的下標不能超出這個範圍。否則就會下標越界:java.lang.ArrayIndexOutOfBoundsException/<code>

示例代碼:

<code>public class Test1Array
{
  public static void main(String[] args){
    //1.變量的定義
    int num = 10;
    System.out.println(num);
​
    //2.數組
    /*
    創建數組:語法格式
      數據類型[] 數組名 = new 數據類型[容量/長度/個數];
​
    數組是引用類型的數據:
      a中存儲的是數組的實際的地址。
    */
​
    int[] a = new int[5];//聲明一個數組,並創建出來,然後就可以使用這個數組了。
    System.out.println(a);
​
    //3.使用數組:存儲數據
    a[0] = 10;
    a[1] = 20;
    a[2] = 30;
    a[3] = 40;
    a[4] = 50;
    //a[5] = 100;//java.lang.ArrayIndexOutOfBoundsException
​
    //獲取數據
    System.out.println(a[0]);//打印數組的第一個元素
    System.out.println(a[1]);//打印數組的第二個元素
    System.out.println(a[2]);//打印數組的第三個元素
    System.out.println(a[3]);//打印數組的第四個元素
    System.out.println(a[4]);//打印數組的第五個元素
​
    
    //課堂練習:創建一個數組, 存儲班級5位同學的性別。
    char[] arr2 = new char[5];
    arr2[0] = '男';
    arr2[1] = '男';
    arr2[2] = '男';
    arr2[3] = '女';
    arr2[4] = '女';
​
    //打印悄悄
    System.out.println(arr2[0]);
    System.out.println(arr2[1]);
    System.out.println(arr2[2]);
    System.out.println(arr2[3]);
    System.out.println(arr2[4]);
    
​
  }
}/<code> 

2.3、內存分析(擴展)

<code>內存:存儲數據
A:棧,存放的是基本數據類型的變量,以及引用類型變量的引用。
  特點:函數中的變量所佔用的空間,執行之後就會銷燬。
B:堆,存放的是new出來的東西。
  特點:執行之後,堆裡存儲的內容(對象等),會被標記為垃圾,但是不會立即被銷燬,而是等待系統的垃圾回收機制來回收(GC)。
  JVM,GC(Grabage Collection)
  /<code>
Java小白入門教程(8)——數組


2.4、數組的長度

<code>獲取數組的長度:length,數組的一個屬性。
數組名.length--->獲取這個數組的長度。/<code>


2.5、使用循環遍歷數組

2.5.1、普通的循環

<code>1、遍歷:依次訪問數組中每個元素。可以賦值,可以取值。
2、因為操作數組,就是數組名字配合下標,而下標固定都是從0開始,到長度減1。
for(int i = 0;i < arr2.length;i++){
  System.out.println(arr2[i]);
}/<code>

示例代碼:

<code>class Test2ArrayFor 
{
  public static void main(String[] args) 
  {
    //定義了一個數組,存儲了5個學生的性別。
    char[] arr2 = new char[5];
    arr2[0] = '男';
    arr2[1] = '男';
    arr2[2] = '男';
    arr2[3] = '女';
    arr2[4] = '女';
​
    /*
    System.out.println(arr2[0]);
    System.out.println(arr2[1]);
    System.out.println(arr2[2]);
    System.out.println(arr2[3]);
    System.out.println(arr2[4]);
    */
​
    //藉助循環來打印數組:for,while,do-while循環
​
    for(int i = 0;i < arr2.length;i++){
      //i:0,1,2,3,,5
      System.out.println(arr2[i]);
      //arr2[0],arr2[1],arr2[2],arr2[3],arr2[4]
    }
​
​
    System.out.println(arr2.length);//專門用於獲取一個數組的長度,5
    
  
    //課堂練習1:定義一個int類型的數組,求該數組中所有元素的總和。
​
    //課堂練習2:統計這個數組中元素的平均值。
  }
}
​/<code>


2.5.2、for-each循環

<code>for-each循環:【擴展】
增強for循環:JDK1.5的版本出現的。
特定的用法:專門用於獲取數組中的每一個元素的值。
語法結構:
for(數據類型 變量名 : 數組名){
    System.out.println(變量名);
}
工作原理:
for(int e :arr){
    System.out.println(e);
}
int e,定義變量e,
    依次獲取數組的元素,賦值給e
注意點:
    A:for-each只能獲取數組的數據,但是不能給數組進行賦值
    B:for-each,在代碼這個層面,不能操作下標。/<code>

示例代碼:

<code>public class Test1ForEach
{
  public static void main(String[] args){
    /*
    循環的遍歷:依次獲取裡面的每一個元素
    方法一:一個一個的獲取
​
    方法二:普通的循環:for循環
​
    方法三:for-each循環:
    for(數據類型 變量名 : 數組名){
      System.out.println(變量名);
    }
​
    element,元素。數組中存儲的數據-->數組的元素。
    */
​
    int[] arr = new int[4];
    arr[0] = 1;
    arr[1] = 4;
    arr[2] = 3;
    arr[3] = 5;
    //方法一:
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);
    System.out.println(arr[3]);
​
    //方法二:
    for(int i=0;i < arr.length;i++){
      System.out.println("--->" + arr[i]);
    }
​
​
    //方法三:
    /*
    index-->0,1,2,3
    arr--->[1,4,3,5]
​
    工作原理:
      int e,定義變量e,
        依次獲取數組的元素,賦值給e
    
    */
    for(int e : arr){
      //int e = 1;
      //e = 4;
      //e = 3;
      //e = 5;
      System.out.println(e);
    }
​
    System.out.println("------------------");
​
    //普通的for循環賦值
    int[] arr2 = new int[5];//1,3,5,7,9
    for(int i = 0;i/<code>

2.6、數組中的默認值

<code>數組的默認值,就是數組創建後,裡面存儲的默認的數據。
數組的引用存在棧內存中,數組本身存在堆內存中。
數組創建完,就有默認的數據了。
數組中存儲的默認值:
            數組中是有默認值的
            整數:0
            小數:0.0
            字符:\u0000
            布爾:false
            其他:null
​/<code>

示例代碼:

<code>class Test2DefaultValue 
{
  public static void main(String[] args) 
  {
    /*
    數組中存儲的默認值:
      數組中是有默認值的
      整數:0
      小數:0.0
      字符:\u0000
      布爾:false
      其他:null
​
​
    arr[i]?
      1.先根據arr中存儲的地址,找到這塊堆內存的數組元素。
      2.找到這塊數組內存後,根據i來獲取對應的空間
    */
​
    int n ;//可能尚未初始化變量n
    System.out.println(n);
​
    int[] arr = new int[5];
​
    for(int i = 0;i/<code>


2.7、創建數組的其他語法

<code>/*
動態創建數組:先創建數組,然後再根據下標一個一個存儲數據。
A:先聲明,再創建(分配內存空間)
數據類型 [] 數組名;
數組名 = new 數據類型[長度];
​
B:聲明並創建
數據類型 [] 數組名 = new 數據類型[長度];
數據類型  數組名[] = new 數據類型[長度];
​
​
//靜態創建數組:聲明,創建,賦值一起寫完。
C:聲明,創建,並賦值
數據類型[] 數組名 = {數值1,數值2,數值3,數值4.。。。};
//=左邊聲明數組,=右邊,會先根據{}中數據的個數,然後再將{}中數據,按照順序存儲進去。
完成了幾件事:
            1.先聲明:int[] c
            2.根據{}中數組值的個數,開闢堆內存
            3.將{}中的數組值,依次按照順序存入數組中
D:聲明,創建,並賦值
數據類型[] 數組名 = new 數據類型[]{數值1,數值2,數值3,數值4.。。。}
*//<code>

示例代碼:

<code>class Test3ArrayCreate 
{
  public static void main(String[] args) 
  {
    //創建方式1:先聲明,再創建
    int[] a = null;//引用類型默認賦值null
    a = new int[5];//創建,有new表示開闢堆內存,創建數組了,才可以使用數組。
    
    
    //創建方式2:聲明和創建寫一起
    int[] b = new int[5];
    System.out.println(a);
​
    //創建方式3:聲明,創建,賦值,寫一起
    int[] c = {1,2,3,4,5};
    /*
      完成了幾件事:
      1.先聲明:int[] c
      2.根據{}中數組值的個數,開闢堆內存
      3.將{}中的數組值,依次按照順序存入數組中
    */
    System.out.println(c.length);
    for(int e :c){
      System.out.println(e);
    }
​
    //創建方式4:
    int[] d = new int[]{1,2,3,4,5};
    System.out.println(d.length);
​
​
​
    int[] e;
    e = new int[]{1,2,3,4,5};
    for(int i:e){
      System.out.println(i);
    }
​
  }
}
​/<code>

2.8、數組的地址轉移

<code>Java中的數據分為兩大類:
基本類型:4類8種
  操作的都是數值本身
引用類型:數組
  操作的是地址
​
基本類型進行賦值:數值
引用類型進行賦值:地址/<code>

示例代碼:

<code>class Test4ArrayAddress 
{
  public static void main(String[] args) 
  {
    /*
    數組:引用類型的數據
      數組名,存儲是引用地址。
    */
​
    int[] a = new int[3];
    System.out.println(a.length);//3
    System.out.println(a);//a數組的地址
    System.out.println(a[0]);//0
​
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
​
    int[] b = {4,5,6,7};
    System.out.println(b.length);//4
    System.out.println(b);//b的地址
    System.out.println(b[0]);//4
​
    int[] c = a;//將a的值賦值給c,就是將a存儲的數組的地址賦值給c
    //a和c存儲的地址相同,那麼就指向了同一個數組
    System.out.println(c.length);//3
    System.out.println(c);//a的地址
    System.out.println(c[0]);//1
​
    c[0] = 100;
    System.out.println(a[0]);
    System.out.println(b[0]);
    System.out.println(c[0]);
​
​
    b = c;
​
    b[1] = 200;
    System.out.println(a[1]);//200
    System.out.println(b[1]);//200
    System.out.println(c[1]);//200
​
    System.out.println("Hello World!");
  }
}
​/<code>

內存分析:

Java小白入門教程(8)——數組

三、數組在方法中的使用

3.1、數組作為參數

數組是引用類型:傳遞的是地址。就是參數也會指向這塊內存。當方法結束的時候,參數就銷燬了。

<code>class Test5ArrayMethod 
{
​
    //設計一個方法,用於打印數組
    public static void printArray(int[] arr){//int[] arr = a;a的地址給了arr,那麼arr和
       // a指向同一塊內存的數組
        for(int e : arr){
            System.out.print(e +"\t");
        }
        System.out.println();
    }
​
    public static void main(String[] args) 
    {
​
        int[] a = {1,2,3,4,5};
​
        //設計一個方法,用於打印數組
        printArray(a);//將a的地址,傳遞給arr
        System.out.println("Hello World!");
    }
}/<code>

內存分析:

Java小白入門教程(8)——數組

3.2、數組作為返回值

示例代碼:

<code>//設計一個方法,用於創建一個數組, 並賦值。數組要返回給調用處
    public static int[] createArray(int len){
        int[] arr = new int[len];
        for(int i = 0;i /<code>
Java小白入門教程(8)——數組

3.3、可變參數【擴展】

<code>概念:一個方法可以接收的參數的數量不定(0-多個),但是類型固定。
​
語法:數據類型 ... 參數名,可變參數在方法中當數組使用。
​
注意事項:
    1、如果參數列表中,除了可變參數還有其他的參數,可變參數要寫在整個參數列表的最後。
    2、一個方法最多隻能有一個可變參數。
    /<code> 

示例代碼:

<code>class Test6Array 
{
    
    //求一組int類型的數據的和
    public static void getSum(int ... nums ){
        int sum = 0;
        for(int i = 0;i /<code>

四、數組的排序

排序:數組是存儲一組數據,而且這些數據是有順序的。但是數值本身可能是無序的。通過算法來實現給數組進行排序,升序(數值從小到大),降序(數值從大到小)。

4.1 冒泡排序

冒泡排序:思路(升序):比較相鄰的兩個數,較大的數據需要向後移動。長度減1。

<code>1、冒泡排序:Bubble Sort
原理:比較相鄰的兩個數,將較大的數,向後移動。
    
class Test7BubbleSort 
{
  public static void main(String[] args) 
  {
    int[] arr = {15,23,8,10,7};
    
​
    for(int i= 1; i arr[j+1]){
          //交換
          int temp = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = temp;
        }
      }
    }
​
    for(int i = 0;i/<code>

選擇排序:思路(升序):每次找個基準值,定一個變量k表示比較小的值的下標。每輪比較完,都在基準值上放一個比較小數。

4.2 選擇排序

示例代碼:

<code>package com.qf.array;
​
public class Test1SelectionSort {
​
  public static void main(String[] args) {
    /*
     * 選擇排序: 思路: 每一輪找個基準值:在基準值上放一個比較小的數。
     * 
     * 定義一個變量k,用於標記比較小的數的下標
     */
    int[] arr = { 15, 23, 8, 10, 7 };
​
    for (int i = 0; i  
< arr.length - 1; i++) { // i = 0,1,2,3,表示輪數 // 用於標記本輪中,要找的比較小的值。 int k = i; ​ // 依次比較arr[k] for (int j = k + 1; j < arr.length; j++) { // 比較arr[k]和arr[j],如果arr[k]值大於arr[j]的值,將j賦值給k if (arr[k] > arr[j]) { k = j; } } ​ // 交換arr[i]和arr[k] // i = 0, 第一輪:arr[0],arr[k] // i = 1,第二輪, arr[1],arr[k] // i =2,第三輪,arr[2],arr[k] if (k != i) { int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } ​ // 排序後,打印數組 for (int e : arr) { System.out.println(e); } ​ } ​ } ​/<code>

五、Arrays工具類

5.1、工具類:Arrays

<code>JDK提供好的類:
    A:Scanner,讀取鍵盤
    B:String,字符串
    C:Math,數學的
    D:Arrays,提供數組的常規操作的
    E:System,
    。。。/<code>

在Arrays類中,提供了很多關於數組常用的操作方法。

5.2、數組的複製

就是將一個數組的數據,複製到另一個數值中。

<code>方法一:通過循環,依次複製,將原數組的數據,一個一個,複製到目標數組中
方法二:Arrays類裡方法:copyOf(原數組,新數組的長度)-->返回值是新數組
方法三:System類裡的方法:arraycopy(原數組,原數組位置,新數組,新數組位置,拷貝的個數)/<code>

示例代碼:

<code>package com.qf.array;
​
import java.util.Arrays;
​
public class Test3Copy {
​
  public static void main(String[] args) {
    int[] a = {1,2,3};
    
    int[] b = new int[10];
    //數組的拷貝:
    //方法一:自己通過循環依次複製,吭哧吭哧
    for(int i=0;i/<code>
Java小白入門教程(8)——數組

六、二維數組

<code>​
    維度:dimension
    數組:存儲相同類型的一組數據。
    一維數組:數組中存儲的就是數據了。
    二維數組:存儲的是一維數組。本質也叫數組的數組。也被稱為矩陣:行和列的。
    多維數組。。。/<code>

示例代碼:

<code>package com.qf.array;
​
public class Test4TDArray {
​
  public static void main(String[] args) {
    //二維數組
    //一維數組
    int[] a = {1,2,3,4};
    int[][] b = {
        {1,2,3},
        {4,5,6},
        {7,8,9,10}
        };
    System.out.println(b);//打印的是b這個二維數組的地址
    System.out.println(b.length);//3
    System.out.println(b[0]);//第一個一維數組的地址
    System.out.println(b[1]);
    System.out.println(b[2]);
    System.out.println(b[0][1]);//2
    System.out.println(b[1][2]);//6
    
    
    for(int i=0;i/<code>
Java小白入門教程(8)——數組

示例代碼:

<code>package com.qf.array;
​
public class Test5TDArray {
​
  public static void main(String[] args) {
    //二維數組的創建語法
    //1.先聲明,再創建
    int[][] a = new int[3][4];//二維,一維一起創建
    
    //2.先創建二維數組,後創建一維數組
    int[][] b= new int[3][];//只是創建了二維數組,但是一維還沒有創建
    b[0] = new int[3];
    b[1] = new int[4];
    b[2] = new int[4];
    
    //3.聲明,創建,賦值
    int[][] c = {{},{},{}};
    
    //4.
    int[][] d = new int[][]{{},{},{}};
  }
​
}
​/<code>

七、作業

1、給定一個整數數組,例如{2,4,5,6,7,8}和一個數字,例如10,請設計一個方法,找出兩個元素,並且使這兩個數的和為給定數字,並打印出來。

2、某個公司採用公用電話傳遞數據,數據是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字都加上5,然後再用加5後的數字除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。打印加密後的數字。

3、定義一個數組,存儲以下數據:{1,2,3,4,5,6,7,8,9},請查找該數組中,是否存在數字8。


分享到:


相關文章: