java 复习之数组(2)

本文围绕Java数组展开,介绍了数组遍历的for循环与foreach方式,指出foreach修改元素不影响数组访问。还提及数组转字符串、拷贝(浅拷贝与深拷贝)、查找(二分查找需有序)等操作,以及数组排序的标准库方法,如Arrays.sort,同时强调面试需掌握快速排序和冒泡排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组的遍历
数组的遍历使用for循环与foreach来实现

for(int i =0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
        for (int x:arr) {
            System.out.println(x);
        }

foreach使用时针对x修改不会对数组的访问有影响
在这里插入图片描述
这里的arr是已知数组。
在这里插入图片描述
通过修改a[0] 可以改变arr[0]的数值
Java中引用类型都具有这样的特点

标准库中数组转字符串的方法
Arrays.toString()

int[] arr={1,2,3,4};
System.out.println(Arrays.toString(arr));
[1, 2, 3, 4]

数组拷贝

int[] arr2=arr1;

这并不是拷贝只是起了一个别名

int[] arr={1,2,3,4};
int[]  result=copyof(arr);

真正的拷贝数组标准库中有这样的函数,它允许新数组和旧数组不一样长
如果新数组长度比旧数组短,数组被截断拷贝,如果比旧数组长,则多余的位置自动初始化为0
Arrays.copyOf()

  int[] arr={1,2,3,4};
  int[] result=Arrays.copyOf(arr,arr.length);

以上写法称之为浅拷贝

更复杂的数组拷贝(二维数组的拷贝)深拷贝

{
            {1,2,3,4},
            {1,2,3,4}
}

在数组中有两种查找
1.给下标查数值(不算查找)
2.给值查下表
方法1:

int[] arr={1,2,3,4};
int pos =chaZhao(arr,1);
         System.out.println(pos);
        }
    public static int chaZhao(int[] arr,int toChaZhao){
        for (int i=0;i<arr.length;i++){
            if(toChaZhao==arr[i]){
                return i;
            }
        }
        return -1;
    }

方法2二分查找
(要求有序)本质在于拿待查找区间中的元素,和待查找元素进行比较,每次比较都能砍掉一半的区间。

        int pos=erFen(arr,100);
        System.out.println(pos);
        }

    public  static int erFen(int[] arr, int toErFen) {
        int left=0;
        int right=arr.length-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(toErFen<arr[mid]){
                right=mid-1;
            }
            else if(toErFen>arr[mid]){
                left=mid+1;
            }
            else{
                 return  mid;
            }
        }return -1;
    }

java的数组排序标准库中有相应的Arrays.sort方法来进行排序。
当然在面试中我们需要掌握快速排序和冒泡排序。尤其是快速排序在面试中是非常高频出现的。
集合类排序Collections.sort
逆序
逆序是要修改数组的内容,而不是反向打印(不修改内容)

public static void niXu(int[] arr) {
        int left=0;
        int right=arr.length-1;
        while(right>left){
            int tmp=arr[left];
            arr[left]=arr[right];
            arr[right]=tmp;
            left++;
            right--;
        }
    }

排序之偶数在前奇数在后
核心思想
在这里插入图片描述

 public static void ouQianJiHou(int[] arr) {
        int left=0;
        int right=arr.length-1;
        while (left<right){
            while(left<right&&arr[left]%2==0){
                left++;
            }
            while (left<right&&arr[right]%2!=0){

                right --;
            }
            int tmp=arr[left];
            arr[left]=arr[right];
            arr[right]=tmp;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值