Java 基础学习 数组

目录

1 简介

2 创建数组

3 数组长度

4 访问数组元素

5 遍历数组

1  for循环

2 for each循环

6 排序算法

1 冒泡排序

2 选择排序

3 插入排序

7 数组元素查找

顺序查找

二分查找

8 可变长参数

9 Arrays工具类

1 数组转字符串

2 数组赋值

3 数组排序

4 二分查找

5 复制数组(扩容)

6 比较数组

10 多维数组

创建二维数组

遍历二维数组


1 简介

数组是用来存储固定数量同类型元素的一种数据结构,它是引用类型

2 创建数组

数据类型[]  数组名 = {元素一,元素二......元素n}

或 数组类型[] 数组名 = new 数据类型[数组长度]

int [] arr1 = {1,2,3,4};
或
int [] arr1 = new int[]{1,2,3,4};


String[] arr2 = new String[5];
arr2[0]="a";

3 数组长度

数组的对象length属性,可以动态的计算出数组的长度

int length = arr1.length;

4 访问数组元素

通过数组名下标的形式访问数组元素:数组名[下标]

访问包含:获取元素的值和修改元素的值

下标值:从0开始,0表示第一个

5 遍历数组

1  for循环

for(int i=0; i<arr1.length;i++){
    System.out.println(i);

}

2 for each循环

//增强for循环
for(int temp : arr1){
    System.out.println(temp);
}

6 排序算法

简单排序:冒泡排序,选择排序,插入排序等

                时间复杂度O(n^2)

复杂排序:快速排序,希尔排序,堆排序,归并排序等

1 冒泡排序

在要排序的一组数中,对当前还未排好的序的全部范围的全部数,自前而后对相邻的两个数依次进行比较和交换位置,让较大的数往后,较小的数往前(冒泡)。

public static void bubbleSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                // swap arr[j] and arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
 

2 选择排序

以下是使用Java实现选择排序的示例代码:

public class SelectionSort {
    public static void sort(int[] arr) {
        int n = arr.length;
        
        for (int i = 0; i < n - 1; i++) {
            int minIdx = i;
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[minIdx]) {
                    minIdx = j;
                }
            }
            int temp = arr[i];
            arr[i] = arr[minIdx];
            arr[minIdx] = temp;
        }
    }
    
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 3, 9, 1};
        sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

选择排序的原理是,从未排序的元素中选择最小的元素,并将其放在已排序的部分的末尾。每次迭代,选择未排序部分的最小元素,然后将其放在已排序部分的末尾,直到所有的元素都排序完成。

3 插入排序

以下是使用Java实现插入排序的示例代码:

public static void insertionSort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

注解:

  • arr 是要进行排序的数组;
  • n 是数组的长度;
  • key 是选中的未排序的元素;
  • j 是用于比较的元素下标;

算法流程:

  • 从第二个元素开始,将其选中,即 key = arr[i]
  • 将选中的元素前面的所有元素与选中元素比较大小,并向右移动大于选中元素的元素;
  • 将选中元素插入到合适的位置,并重复第1步到第3步,直到所有元素排序完成。

如果要对数组进行降序排序,则需要改变比较大小的方式:while (j >= 0 && arr[j] &lt; key) { ... }

7 数组元素查找


顺序查找

int [] source = {1,2,3,4,5,6,7};
int target = 4;
for(int i=0;i<source.length;i++){
        if(source[i]==target){
            System.out.println(i);
    }

}

二分查找

二分查找又叫折半查找,其思想是:要求待查找的序列有序(前提:必须给数组排好序),每次取中间位置的值与待查关键字比较,如果中间位置的值比特值关键字大,则在前半部分循环这个查找的过程,如果中间位置比特待查关键字小,则在后半部位循环这个查找的过程。直到查到了为止,否则序列中没有待查的关键字,其时间复杂度O(logN)。

以下是使用Java实现二分查找的示例代码:

public static int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;

    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }

    return -1;
}

注解:

  • arr 是要进行查找的有序数组;
  • target 是要查找的目标元素;
  • left 是左边指针,初始值为0;
  • right 是右边指针,初始值为arr.length - 1
  • mid 是中间指针,初始值为left + (right - left) / 2

注意:二分查找的前提是要求数据元素是有序的。

8 可变长参数

JDK1.5增加了新特性,可变参数。使用…表示:适用于参数不确定,类型确定的情况

java把可变参数当做数组处理

注意:可变参数必须位于最后一项,当可变参数多于一个时,必须有一个不是最后一项,所以只支持有一个可变参数、因为参数个数不确定,所以当其后面还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后面的参数,所以只能让可变参数位于最后一项。

可变参数的特点:

1 只能出现在参数列表的最后

2 …位于变量类型和变量名之间,前后有无空格都可以

3 调用可变参数的方法时,编译器为该可变参数隐含创建的一个数组,在方法体中以数组的形式访问可变参数。

public static void main(String[] args){

    add(1,2);
    add(1,2,3)

}

public static int add(int...args){

    int sum=0;
    for(int i=0;i<arg.length;i++){
    sum+=args[i];
    
    }

}

9 Arrays工具类

java.util.Arrays

1 数组转字符串

Arrays.toString(arr);

2 数组赋值

//将数组中的所有元素都赋值为0
Arrays.fill(arr,0);

//fill(数组,开始下标,结束下标,替换值)
Arrays.fill(arr,1,4,8)

3 数组排序

//按照元素自然顺序排序
Arrays.sort(arr)

4 二分查找

int index = Arrays.binarySearch(arr,9)
//返回找不到的下标值
//找不到返回的是负数,返回负的该在第几个

5 复制数组(扩容)

int [] arr4 = Arrays.copyOf(arr,10)

6 比较数组

bollean tar = Arrays.equals(arr,arr2);//比较数组是否一样

10 多维数组

多维数组可以看成一个数组的数组,即数组中的元素还是数组:

创建二维数组


int [][] arr1 = ={{1,2},{2,3,4},{4,5}};

int [][] arr = new int[3][];
arr[0] = new int[]{1,2};
arr[1] = new int[]{2,3,4};
arr[2] = new int[]{3,4,5};

遍历二维数组

for(intb i= 0; i<arr4.length;i++){
    for(int j=0;j<arr4[i].length;j++){
           int a= arr4[i][j]; 
 
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值