数组

目录

数组是一块连续的内存,存储的是数据类型相同的若干个数据

定义方式

new int[]不能写任何数字,可以忽略new int[],array1和array2等价

array3是动态初始化

给数组array4分配内存,并没有初始化,里面的值默认是0(静态初始化)

定义方式的对错

布尔类型的默认值是false

数组的输出

输出sout(数组名[数]);

输出数组长度:

遍历数组

1.循环形式

2.for-each形式

3.把数组以字符串形式输出

什么是引用类型?

引用类型:String常量串、枚举类型

JVM的划分

表达形式:array这个引用指向了哪个对象

null的情况

若有sout(array1[0]);则有NullPointerException空指针异常

没有人引用堆里的某个对象时,JVM会自动回收该对象

tips:

1.JAVA中null和0号地址内存并无关联

2.不是传引用就一定会修改实参的值,需要具体看,拿到引用之后形参做了什么动作

字符串的拼接

例:自己写mytostring输出[1,2,3,4]

数组的拷贝

JAVA中的拷贝方法:

一、

int[] xxx = Arrays.copyOf(array,array.length);

二、

int[] xxx = Arrays.copyOfRange(array,2,5);

三、

public static native void arraycopy(Object str,int srcPos,Object dest,int destPos,int length);

例题:求数组全部长度的平均值

 查找数组中的指定元素(顺序查找或二分查找)

排序

二维数组

int[][] array={{1,2,3},{1,2,3}};

打印二维数组的三种方式


数组是一块连续的内存,存储的是数据类型相同的若干个数据

定义方式

int[] array1={1,2,3};

int[] array2=new int[] {1,2,3};

new int[]不能写任何数字,可以忽略new int[],array1和array2等价

1.int a = 10;  int array3=new int[a];

array3是动态初始化

2.int[] array4=new int[10];

给数组array4分配内存,并没有初始化,里面的值默认是0(静态初始化)

定义方式的对错

int[] array5; array5=new int[]{1,2,3};对

inr[] array5; array5={1,2,3};错

布尔类型的默认值是false

boolean[] array=new int[5];

若数组中存储类型为引用类型,默认值是null;

数组的输出

数组的输出不能越界,数组可访问范围[0,length-1]

输出sout(数组名[数]);

int[] array={12,23,34,45,56};

sout(array[2]);

改变数组中某个元素:array[2]=144;

输出数组长度:

sout(array.length);

遍历数组

1.循环形式

for(int i=0;i<array.length;i++){

        sout(array[i]+"  ");}        sout();

2.for-each形式

        int[] array={1,2,3};

        for(int x:array){

                sout(x+"  ");}        sout();

3.把数组以字符串形式输出

String ret = Arrays.toString(array);

        sout(ret);

什么是引用类型?

引用类型:String常量串、枚举类型

JVM的划分

线程隔离的数据区JAVA虚拟机栈(一般说的栈)
本地方法栈(一般来执行C/C++的方法)
程序计数器(存放指令)
所有堆(存放对象)
方法区(存储静态变量)

int aa=10;  int[] array={12,23,34,45,56};

                        array是引用变量,后面的赋值是数据对象

局部变量在栈上开辟内存,此时的aa,array都是局部变量

表达形式:array这个引用指向了哪个对象

null的情况

int array1=null; sout(array1);

代表array1这个引用不能指向任何对象

若有sout(array1[0]);则有NullPointerException空指针异常
没有人引用堆里的某个对象时,JVM会自动回收该对象

array1=array2;意思是array1这个引用指向了array2这个引用所指向的对象。

理解:存储了值,值是个地址

tips:

1.JAVA中null和0号地址内存并无关联
2.不是传引用就一定会修改实参的值,需要具体看,拿到引用之后形参做了什么动作

字符串的拼接

例:自己写mytostring输出[1,2,3,4]

public class TEXT1 {
    public static String myTOString(int[] array){
        String str = "[";
        for (int i = 0; i < array.length; i++) {
            str += array[i];
            if (i != array.length-1){
                str += ", ";
            }
        }
        str += "]";
        return str;
    }

  public static void main(String[] args) {
    int[] array = {1,2,3,4};

    String str = myTOString(array);
    System.out.println(str);
    }
}

数组的拷贝

import java.util.Arrays;

public class TEXT1 {
    public static int[] copyOf(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[] xxx = {9,9,9,9};

    int[] array2 = copyOf(xxx);
    System.out.println(Arrays.toString(array2));
    //用法一样:
    //String str = Arrrays.tostring(arrray);
    //System.out.println(str);
    }
}

拷贝是把一个图复制出一个图,意思是多了一个对象

int array2={1,2,3,4};  array3=array2;  不叫拷贝

只是指向的对象一样了,并没有多复制出来一个对象

JAVA中的拷贝方法:

一、

int[] xxx = Arrays.copyOf(array,array.length);

 参数一:要拷贝的数组

参数二:要拷贝的长度

二、

int[] xxx = Arrays.copyOfRange(array,2,5);

意思是from 2 to 5,JAVA取值范围一般是左闭右开[2,5)

拷贝是连续的,不是跳着的

三、

public static native void arraycopy(Object str,int srcPos,Object dest,int destPos,int length);

其中的native底层是c/c++代码,优点是速度快

例题:求数组全部长度的平均值

public class TEXT2 {
    public static void main(String[] args) {
        //求数组全部长度的平均值
        int[] array = {1,2,3,4,5,6,7,8,9};
        int sum = 0;
        for (int x:array) {
            sum += x;
        }
        System.out.println(sum*1.0 / array.length);
    }
}

 查找数组中的指定元素(顺序查找或二分查找)

import java.util.Arrays;

public class TEXT2 { //用二分法查找数组中的指定元素
    public static int search(int[] array, int k) {
        int left = 0;
        int right = array.length - 1;

        while (left <= right) {
            int mid = (left + right) / 2;
            if (array[mid] < k) {
                 left = mid + 1;
            }
            else if (array[mid] > k) {
                 right = mid - 1;
            }
            else {
                return mid;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        //用二分法查找数组中的指定元素
        int[] array = {1,2,3,4,5,6,7,8,9};
        System.out.println(search(array, 3));
        System.out.println("====================");
        System.out.println(Arrays.binarySearch(array,3));//java中定义的
    }
}

 

排序

import java.util.Arrays;

public class TEXT3 {
    public static void bubbleSort(int[] array){//冒泡排序
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j] > array[j+1]){
                    swap(array,j,j+1);
                }
            }
        }
    }

    public static void swap(int[] array,int k,int p){
        int temp = array[k];
        array[k] = array[p];
        array[p] = temp;
    }

    public static void reverse(int[] array){
        int left = 0;
        int right = array.length-1;
        while (left < right){
            swap(array,left,right);
            left++;
            right--;
        }
    }

    public static void main(String[] args) {
        int[] array = {1,99,77,4,5,66};
        
        bubbleSort(array);//自己定义的排序
        System.out.println(Arrays.toString(array));

        System.out.println("=========================");

        Arrays.sort(array);//java中的排序
        System.out.println(Arrays.toString(array));

        System.out.println("=========================");

        reverse(array);//自己定义的逆序排序
        System.out.println(Arrays.toString(array));
    }
}

 

二维数组

int[][] array={{1,2,3},{1,2,3}};

123
456

打印二维数组的三种方式

一、

System.out.print(Arrays.deepToString(array));

二、

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]);
            }
            System.out.println();
        }

三、

        for (int[] temp:array) {
            for (int x:temp) {
                System.out.print(x+"  ");
            }
            System.out.println();
        }
        System.out.println();

(笔记来自比特课程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值