Java——数组的定义和使用

1.数组的概念

1.1数组的创建和初始化

T[] 数组名 = new T[N];
  • T:表示数组中存放元素的类型
  • T[]:表示数组的类型
  • N:表示数组的长度

示例:

int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组 
double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组 
String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素的数组

1.2数组的初始化

数组初始化分为动态初始化和静态初始化

1. 动态初始化:在创建数组时,直接指定数组中元素的个数
int[] array = new int[10];
2. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
语法格式: T[] 数组名称 = {data1, data2, data3, ..., datan} ;
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9}; 
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0}; 
String[] array3 = new String[]{"hell", "Java", "!!!"};
【注意事项】
  • 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
  • 静态初始化时, {}中数据类型必须与[]前数据类型一致。
  • 静态初始化可以简写,省去后面的new T[]
如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值

 如果数组中存储元素类型为引用类型,默认值为null

2.数组的基本操作

2.1数组元素的访问

int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);

2.2数组的遍历

" 遍历 " 是指将数组中的所有元素都访问一遍 , 访问是指对数组中的元素进行某种操作
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        for(int i=0;i<5;i++){
            System.out.println(array[i]);
        }
    }
注意: 在数组中可以通过 数组对象 .length 来获取数组的长度
也可以使用 for-each 遍历数组
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        for(int x:array){
            System.out.println(x);
        }
    }

3.数组的特征

3.1数组是引用类型

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;
而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。
public static void func() {
    int a = 10;
    int b = 20; 
    int[] arr = new int[]{1,2,3};
 }
在上述代码中, a b arr ,都是函数内部的变量,因此其空间都在 main 方法对应的栈帧中分配。
a b 是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。
array 是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址。
引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地
址,引用变量便可以去操作对象 。类似于C语言的指针。

3.2认识 null  

null Java 中表示 " 空引用 " , 也就是一个不指向对象的引用 .
int[] arr = null; 
System.out.println(arr[0]); 

// 执行结果 Exception in thread "main" java.lang.NullPointerException 
                    at Test.main(Test.java:6)
null 的作用类似于 C 语言中的 NULL ( 空指针 ), 都是表示一个无效的内存位置 . 因此不能对这个内存进行任何读写操作 . 一旦尝试读写, 就会抛出 NullPointerException.
注意 : Java 中并没有约定 null 0 号地址的内存有任何关联

4.数组使用

4.1数组转字符

import java.util.Arrays 
int[] arr = {1,2,3,4,5,6}; 
String newArr = Arrays.toString(arr); 
System.out.println(newArr);


 // 执行结果 [1, 2, 3, 4, 5, 6]

4.2数组拷贝

public static void main(String[] args) {
    int[] arr = {1,2,3,4,5,6};
    int[] newArr = arr;
    System.out.println( Arrays.toString(arr));
    newArr = Arrays.copyOf(arr, arr.length);
    System.out.println( Arrays.toString(newArr));
}

拷贝某个范围

int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);
System.out.println(Arrays.toString(newArr2));

实现拷贝这个功能 my_copy

public static int[] copyOf(int[] arr) { 
    int[] ret = new int[arr.length]; 
    for (int i = 0; i < arr.length; i++) { 
            ret[i] = arr[i]; 
     }
 return ret; 
}

4.3查找数组中指定元素(顺序查找)

    public static void main(String[] args) {
        int[]arr={1,2,3,4,5,6,7,8};
        System.out.println(Find(arr,8));
    }
    public static int Find(int[]arr,int num){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==num){
                return i;
            }
        }
        return -1;
    }

4.4查找数组中指定元素(二分查找)

针对有序数组可以进行二分查找

    public static void main(String[] args) {
        int[]arr={1,2,3,4,5,6,7,8,9};
        System.out.println(Search(arr,6));
    }
    public static int Search(int[]arr,int num){
        int left=0;
        int right=arr.length-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(num<arr[mid]){
                right=mid-1;
            }else if(num>arr[mid]){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }

4.5数组排序(冒泡排序)

    public static void main(String[] args) {
        int[]arr={3,4,2,7,9,6};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void bubbleSort(int[]arr){
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){
                if (arr[j] > arr[j+1]){
                    int tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }
        }
    }

4.6Java里内置了更高效的排序函数

public static void main(String[] args) {
       int[] arr = {9, 5, 2, 7}; 
       Arrays.sort(arr); 
       System.out.println(Arrays.toString(arr)); 
}

4.7数组逆序

思路
  • 设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素.
  • 然后让前一个下标自增, 后一个下标自减, 循环继续即可.
    public static void main(String[] args) {
        int[]arr={1,2,3,4,5,6,7,8};
        reverse(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void reverse(int[]arr){
        int left = 0;
        int right = arr.length - 1;
        while (left < right) {
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            left++;
            right--;
        }
    }

猜你喜欢

转载自blog.csdn.net/LxinY213/article/details/124530831