【手把手带你学JavaSE】第五篇:Java中的数组_java array取前3个值

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

一个引用能不能同时指向多个对象吗?
在这里插入图片描述
对于这个代码来说只能指向一个对象,存一个对象的地址。最终只保存了最后一个对象的地址

数组作为方法的参数传递的过程:
在这里插入图片描述
求解打印结果:

前两种求解:
func1

在这里插入图片描述
func2
在这里插入图片描述
分析例子:下图代表什么
在这里插入图片描述
代表array2这个引用,指向了array1这个引用指向的对象。

注意事项:
引用指向引用这句话 是错误的,引用只能指向对象
引用一定在栈上吗?
不一定,一个变量在不在栈上,是你变量的性质决定的,如果你就是一个局部变量,一定是在栈上的。如果不是,例如,实例成员变量那就不一定就是在栈上的。

三、数组在函数中的使用

3.1 基本数据类型的传参

 public static void swap(int x,int y) {
        int h = x;
        x = y;
        y = h;
    }
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a,b);
        System.out.println("交换后 a="+a+" b="+b);
    }


在这里插入图片描述

基本类型的传参,函数中改变形参,不影响实参.

3.2 引用数据类型的传参

public static void mul(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i]\*=2;
        }
    }
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        mul(arr);
        for (int x: arr) {
            System.out.print(x+" ");
        }
    }


在这里插入图片描述
引用类型的传参,函数中改变形参,实参也将被改变.

3.3 数组作为函数的返回值

比如:获取斐波那契数列的前N项

public class TestArray {
    public static int[] fib(int n){
        if(n <= 0){
            return null;
        } 
        
        int[] array = new int[n];
        array[0] = array[1] = 1;
        for(int i = 2; i < n; ++i){
            array[i] = array[i-1] + array[i-2];
        } 
        return array;
    }
    
    public static void main(String[] args) {
        int[] array = fib(10);
        
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}


四、数组的练习题

4.1 交换两个变量的值

public class TestDemo {
    public static void swap(int[] array){
        int tmp = array[0];
        array[0] = array[1];
        array[1] = tmp;
 
    }
    public static void main(String[] args) {
        int[] array = {10,20};
        System.out.println("交换前: "+array[0]+" "+array[1]);
        swap(array);
        System.out.println("交换后: "+array[0]+" "+array[1]);
    }

4.2 写一个方法, 将数组中的每个元素都 * 2

 /\*\*
 \* 在原来的数组上扩大2倍
 \* @param array
 \*/
    public static void enlarge(int[] array){
        for (int i = 0; i <array.length ; i++) {
            array[i] = array[i]\*2;
        }
 
    }
 
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7};
        enlarge(array);
        System.out.println(Arrays.toString(array));
    }

4.3 模拟实现tostring函数

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

4.4 找数组中的最大元素

    public static int maxNum(int[] array){
        if(array == null) return -1;
        if (array.length == 0) return -1;
        int max = array[0];
        for (int i = 1; i <array.length ; i++) {
            if(max < array[i]){
                max = array[i];
 
            }
        }
        return max;
    }
 
    public static void main(String[] args) {
        int[] array = {12,8,14,26,5,7,8};
        int max = maxNum(array);
        System.out.println(max);
    }

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

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

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

//二分查找的必要条件是必须有序的数列
    public static int binarySearch(int[] array,int key){
        int left = 0;
        int right = array.length-1;
        while(left <= right){
            int mid = (left+right)/2;
            if(array[mid] > key){
                right = mid - 1;
            }else if(array[mid] < key){
                left = left + 1;
            }else{
                return mid;
            }
 
        }
        return -1;
    }
 
    public static void main(String[] args) {
        int[] array = {12,14,15,16,18,23};
        System.out.println(binarySearch(array, 15));
    }

4.7 检查数组的有序性

   public static boolean isUp(int[] array){
        for (int i = 0; i <array.length-1 ; i++) {
            if(array[i]>array[i+1]){
                return false;
            }
        }
        return true;
    }
 
    public static void main(String[] args) {
        int[] array = {12,13,14,15,16,17,18};
        System.out.println(isUp(array));
 
    }
}

4.8 数组排序(冒泡排序)

public class TestDemo {
    public static void bubbleSort(int[] array){
        for (int i = 0; i <array.length-1 ; i++) {
            boolean flg = false;
            for (int j = 0; j <array.length-1-i ; j++) {
                if(array[j]>array[j+1]){
                    int tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1]= tmp;
                    flg = true;
                }
            }
            if(flg = false){
                return;
            }
 
        }
    }
    public static void main(String[] args) {
        int[] array = {12,1,23,15,16,13,17};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
 
 
    }
}

4.9 给定一个整型数组, 将所有的偶数放在前半部分, 将所有的奇数放在数组后半部分

    public static void func(int[] array){
        int i = 0;
        int j = array.length - 1;
        while(i <j){
            while(i < j && array[i] % 2 == 0){
                i++;
            }
            while (i < j && array[j] % 2 != 0){
                j--;
            }
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
        }
    }
 
    public static void main(String[] args) {
        int[] array = {1,4,3,6,8,5,9};
        func(array);
        System.out.println(Arrays.toString(array));
    }

4.10 数组的拷贝

第一种:

  把一个数组的值拷贝到另一个数组
 public static int[] copyArray(int[] array){
        int[] copy = new int[array.length];
        for (int i = 0; i <array.length ; i++) {
            copy[i] = array[i];
        }
        return copy;
    }
 
    public static void main(String[] args) {
        int[] array = {1,4,6,3,8,9};
        int[] ret = copyArray(array);
        System.out.println(Arrays.toString(ret));
 
 
    }

第二种:

public static void main(String[] args) {
        int[] array = {1,23,4,6,8};
        int[] ret = Arrays.copyOf(array,array.length);
    }

拷贝数组函数,参数:要拷贝的数组,数组的长度。
返回值是数组类型
还可以长度乘2,但不是在原来的基础上扩大2倍,这里是一个新的对象

public static void main(String[] args) {
        int[] array = {1,23,4,6,8};
        int[] ret = Arrays.copyOf(array,array.length\*2);
    }

拷贝数组(一部分 )函数:

public static void main(String[] args) {
        int[] array = {1,23,4,6,8};
        int[] ret = Arrays.copyOfRange(array,1,3);
    }

所有的Java里面的源代码from,to都是左闭右开区间的

第三种:

public static void main(String[] args) {
        int[] array = {1,4,6,3,8,9};
        int[] copy = new int[array.length];
        System.arraycopy(array,0,copy,0,array.length);
        System.out.println(Arrays.toString(copy));
    }


在这里插入图片描述
第一个参数是源数组,array这个数组。
从0下标开始拷贝到哪里?给一个目的地数组copy,从0位置开始接收。
拷多长?array数组的长度。

第四种:
在这里插入图片描述
产生一个副本,调用clone函数就会产生一个一模一样的array数组

五、二维数组

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.;同理, 还存在 “三维数组”, “四维数组” 等更复杂的数组, 只不过出现频率都很低

基本语法

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

5.1 二维数组的创建和初始化

  • 动态初始化
int[][] array1 = new int[2][3];

  • 静态初始化

注意:初始化时代表二维数组一行的 { } 必须给出

int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] arrays = {{1,2,3},{4,5,6}};

5.2 二维数组的打印

1.深层

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

2.for循环

public static void main(String[] args) {
        int[][] arr = new int[][]{{1,2,3},{4,5,6}};
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }

3.foreach遍历

public static void main(String[] args) {
        int[][] arr = new int[][]{{1,2,3},{4,5,6}};
        for (int[] arr1: arr) {
            for (int x: arr1) {
                System.out.print(x+" ");
            }
            System.out.println();
        }
    }

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[]{{1,2,3},{4,5,6}};
for (int[] arr1: arr) {
for (int x: arr1) {
System.out.print(x+" ");
}
System.out.println();
}
}



[外链图片转存中...(img-kg24M1og-1715366708342)]
[外链图片转存中...(img-h8mPMiOh-1715366708343)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值