重识Java第二天打卡----数组

活动地址:优快云21天学习挑战赛

一、关于数组的基本概念

1.什么是数组

数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。和字符串一样属于引用类型

2.数组的特点

  • 数组是相同类型的变量的集合,即其所有元素的类型相同
  • 元素有固定的顺序,每个元素都有一个固定的编号,称之为索引(index),从0开始递增,类型为int
  • 数组包含的元素个数为最大索引+1,即使用索引n访问到的是第n+1个元素
  • 每个元素相当于一个变量,可以单独进行读写
  • 数组占用一片连续的内存空间

二、数组的具体操作

1.数组的初始化

(1)静态初始化

静态初始化:即数组在定义时就进行赋值。
完整格式: 数据类型[ ] 数组名=new 数据类型[ ]{元素1,元素2,元素3…};
eg: int[ ] ages = new int[ ]{12,24,36,48,60;
(当然,也可以把中括号写在数组名后面,即 int ages[ ] = … )

简化格式:数据类型[ ] 数组名={元素1,元素2,元素3,…};
(就是省略了new+数据类型)

(2)动态初始化

动态初始化:即定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据。
完整格式:数据类型[ ] 数组名=new 数据类型[长度];
eg: int[ ] arr = new int[3];
(此时会填充各种类型的默认值,规则如下:)
在这里插入图片描述
测试代码:

public class test {
    public static void main(String[] args) {
        int[] a = new int[3];
        System.out.println(a[0]);
    }
}

2.数组的遍历

数组有两种遍历方式,一种是for-i 循环常规遍历;另一种是使用for-each进行遍历。如下所示:

		//方法一
 		for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
        //方法二
        for (int i:a) {
            System.out.println(i);
        }

三、数组的内存分配问题

1.数组存储在堆中

数组与变量不同,变量一般存储在栈中,而数组存储在堆中
在这里插入图片描述
但是数组名是存储在栈中的,因为数组是引用类型,所以在对数组进行操作时,数组名起到类似“指针”的作用指向位于堆内存中的数组元素,如下所示:在这里插入图片描述

2.经过一个已有数组赋值的数组是指向同一对象的

测试代码如下:

public class test {
    public static void main(String[] args) {
        int[] a = {1,2,3};
        int[] b = a;
        System.out.println("a数组:"+a[0]);
        System.out.println("b数组:"+b[0]);
        b[0] = 0;
        System.out.println("a数组:"+a[0]);
        System.out.println("b数组:"+b[0]);
    }
}

结果如下:
在这里插入图片描述

四、数组的缺点以及替代

1.缺点

  • 数组一旦定义好长度,就无法动态更改
  • 数组不便于增删元素
  • 数组…我暂时就想到这俩缺点

2.替代

针对以上缺点,可以使用 集合 来解决。具体的,可以采用ArrayList<>。其定义如下:
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。
关于ArrayList,有以下基本操作:

  1. 增:使用 add() 方法,如 sites.add(“Google”);
  2. 删:使用 remove() 方法,如 sites.remove(3); // 删除第四个元素
  3. 改:使用 set() 方法, 如 sites.set(2, “Wiki”); // 第一个参数为索引位置,第二个为要修改的值
  4. 计算数组大小:使用 size() 方法,如 sites.size()

参考

  1. 黑马程序员pdf笔记(需要可评论区留言)
  2. 菜鸟教程 ArrayList介绍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值