0
点赞
收藏
分享

微信扫一扫

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

一、关于数组的基本概念

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];

(此时会填充各种类型的默认值,规则如下:)

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


测试代码:

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.数组存储在堆中

数组与变量不同,变量一般存储在栈中,而数组存储在堆中

重识Java第二天打卡----数组_算法_02


但是数组名是存储在栈中的,因为数组是引用类型,所以在对数组进行操作时,数组名起到类似“指针”的作用指向位于堆内存中的数组元素,如下所示:

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

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]);
}
}

结果如下:

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

四、数组的缺点以及替代

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介绍​​


举报

相关推荐

Mysql 打卡第二天

暑期算法打卡----第二天

java第二天

Java第二天

JAVA第二天

java学习 第二天

JAVA学习第二天

0 条评论