JAVA中的数组

     ✌️ 在Java中,数组是一种用于存储固定大小的相同类型数据项的数据结构,以下是Java数组的主要知识点:


一.声明数组:

数组的4种声明方式:


1.先声明再初始化

例如

//1.声明

int[] nums;

//初始化

nums = new int[5];

2.声明并初始化

例如

//2.声明、初始化

int[] nums = new int[10];

3.创建数组同时赋值

例如

//3.创建数组同时赋值

String[] names=new String[]{"大名","小米","夏雨荷"};

int[] ages=new int[]{21,22,21,56,13};

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

System.out.prinrln(names[i]);

}

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

System.out.prinrln(ages[i]);

}

4.创建同时赋值,简写,不能写成两条语句

例如

//创建同时赋值,简写,不能写成两条语句

String[] cities = {"上海","北京"};

二. 数组的大小:

    Java中数组一旦创建,其大小不可修改,所以数组的扩缩容必须新建一个数组,然后将原来数组的元素复制到新数组中,最后返回新数组即可,然后在调用处用原来数组的引用指向新数组即可。

即可。

例如

public static int[] resize(int[] arr, int newSize) {
    int[] newArr = new int[newSize];
    for (int i = 0; i < arr.length - 1; i++) {
        newArr[i] = arr[i];
    }
    return newArr;
}

三. 访问数组元素:

获取数组中的值的方法:    
新建一个类,定义一个int 类型的数组。开辟空间3个。然后分别赋值。
然后来获取到数组中,每个索引对应位置的,数据。


并输出打印该数组中存储的数据。

1、如何输出数组中元素的值:
(1)第一种方式:通过数组的索引引用,单个输出的方式。
数组名[对应索引]

int[] arr = new int[3];
arr[0] = 234;
arr[1] = 21211;
arr[2] = 54;
System.out.println("--------普通方式,输出数组中的内容--------");
System.out.println(arr[0] +","+arr[1]+","+arr[2]);
System.out.println(arr[1]);
System.out.println(arr[2]);

 (2)、第二钟方式,通过遍历的方式来输出打印。
遍历先要知道数组的知识点:
数组,角标,从0 开始,最大能取到 长度-1
数组的长度,可以用 :arr.length 来获取。

int[] arr = new int[3];
//遍历,就是循环查询找到数组中的每一个元素。称之为遍历。
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
 

四. 多维数组:

在Java中,可以使用多个中括号表示多维数组。例如,int[][] arr = new int[3][4]。

五. 数组长度:

1. 使用“数组名.length”:

数组有一个属性length,通过给数组名加上.length可以返回数组的长度。但是要注意的是,返回的长度是数组的长度减去一,因为数组的下标从0开始,而数组的长度是从1开始的。

2. 使用 Arrays.asList().size() 方法:

Arrays.asList()方法是数组与集合的转换的一个方法,它把数组中的元素转换为List 集合,而把数组转换为List集合以后,就可以在List集合中使用size()方法获取数组的长度了。

3. 使用集合对象ArrayList.size() 方法。

 

六. 数组的遍历:

可以使用for,for...in循环遍历数组中的所有元素

. for循环

    // 最简单的一种循环遍历方法,也是使用频率最高的一种(可优化);循环过程中支持修改索引(修改 i)
        var arr = [1, 2, 3, 4, 5, 6]
        for(var i = 0; i < arr.length; i++) {
            console.log("普通for循环",arr[i])     //1 2 3 4 5 6
        }
    // 优化:使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显
        var arr = [1, 2, 3, 4, 5, 6]
        // var len = arr.length
        // for(var i = 0; i < len; i++) {
        //     console.log("优化后for循环",arr[i])     //1 2 3 4 5 6
        // }
        for(var i = 0,len=arr.length; i < len; i++) {
            console.log("优化后for循环",arr[i])     //1 2 3 4 5 6
        }
    // 能正确响应break、continue和return语句

2. for…in…

    // 这个循环效率比较低,适用于少量数据,也有不少人使用
        // 遍历数组,输出的 key 是数组索引
        var arr = ['我', '是', '谁', '我', '在', '哪']
        for(let key in arr) {
            console.log("for...in...遍历数组key",key)  // 0 1 2 3 4 5
            console.log("输出数组中key对应的值",arr[key])
        }
        // 遍历对象,输出的则是对象的属性名
        let obj = { a: 11, b: 22, c: 33 }
        for(let key in obj) {
            console.log("for...in...遍历对象key",key)  // a b c 
            console.log("输出对象中key对应的值",obj[key])
        }
    // 能正确响应break、continue和return语句

七. 数组的复制:

可以使用System.arraycopy()方法或Arrays.copyOf()方法对数组进行复制。

八. 数组排序:

JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡法、选择排序法、插入排序法。


  • 快速排序法:

主要是运用了Arrays中的一个方法Arrays.sort()实现。

  • 冒泡法:

是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来。

动图演示:
20210331093712773.gif

代码实现

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int [] array = {7,14,3,22,1,6,15,60,5};
        for (int i = 0; i < array.length-1; i++) { //控制循环次数,比长度少一次。
            for (int j = 0; j < array.length-i-1; j++) { //后面排好的值不需要进行比较,所以减去i。
                if(array[j]>array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

测试结果
20210331094738908.png

  • 选择排序法:

是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组。

动图演示:
20210331095136487.gif

 

代码实现

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int [] array = {7,14,3,22,1,6,15,60,5};
        for (int i = 0; i < array.length-1; i++) { //控制循环次数,比长度少一次。
            for (int j = 0; j < array.length-i-1; j++) { //后面排好的值不需要进行比较,所以减去i。
                if(array[j]>array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

测试结果
20210331094738908.png

  • 插入排序:

是选择一个数组中的数据,通过不断的插入比较最后进行排序。

动图演示:
20210331095136316.gif

代码实现

public class TestDemo {
    public static void main(String[] args) {
        int [] array = {7,14,3,22,1,6,15,60,5};
        int temp=0;
        for(int i=1;i<array.length;i++){
            int j=i-1;
            temp=array[i];
        for(;j>=0&&temp<array[j];j--){
            array[j+1]=array[j];//将大于temp的值整体后移一个单位   
        }
            array[j+1]=temp;
        }
        System.out.println(Arrays.toString(array));
    }
}

测试结果
20210331100601979.png

 

九. 数组的引用传递:

数组是对象,在Java中,使用数组作为参数传递时,实际传递的是数组的引用。

十. 数组的初始化:

可以在声明数组时直接初始化数组,或者使用循环语句进行初始化。


  • 动态初始化:

数据类型[]  数组名 = new 数据类型[数组的开辟空间大小的整数];

int[] arr = new int[3];    
数组的长度:arr.length;
数组的角标从0开始,最大能取到 数组的长度-1

动态初始化的默认值:
创建的int 类型数组,动态初始化,系统给默认值,为0.
创建String 类型,数组,动态初始化的时候,系统给默认值null

小数类型的  数组动态初始化,元素默认值 0.0
boolean 类型,数组动态初始化,元素默认值 false
7ddfd8c32ef94835a8261453856c18e6.jpg

 

例如

String[] names = new String[3];
names[0]=“孙猴子”;
names[1]=“唐僧”;
names[2]=“猪八戒”

  • 静态初始化:

初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度
例如:
String[] names = new String[]{“孙猴子”,“唐僧”,“猪八戒”};

十一. Java中的内存分配以及栈和堆的区别和联系:

Java把内存划分成两种:一种是堆内存,一种是栈内存

栈 :cpu 寄存区

所有的方法,进栈。
所有的局部变量引用,进栈。

栈遵循的存取规则:
先进的,后出
后进的,先出。
存储的时候,使用压栈的方式存储

当栈爆满的时候,优先销毁的是,后进去的。

 

堆 :内存条,开辟内存区
new 出来的所有东西,进堆。

存储的数据,在堆中,随机开辟空间位置,没有具体的顺序。
内存爆满的时候,随机销毁数据。
电脑关机的时候,内存中所有数据销毁。
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值