前言:
本文是个人学习心得,如有错误还望指出。
目录
一、数组
1.1数组介绍
我们在JAVA编程的过程中需要存储数据,若是单项数据则可以直接定义变量来声明,若是多项数据时我们就需要用到一个容器来存储,而数组就是其中一种,数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。
1.2数组的定义格式
数组有两种定义格式,一种是 数据类型[] 数组名
示例:int[] arr ;
char[] arr;
另一种是 数据类型 数组名[]
示例:int arr[];
char arr[];
两种定义格式除了写法以外没有差别。
1.3数组的初始化
我们知道数据在定义时需要先初始化,数组也不例外,并且有两种初始化方法,分别是动态初始化与静态初始化。动态初始化就是只给定数组的长度,由系统给出默认初始化值。
动态初始化格式:数据类型[] 数组名 = new 数据类型[数组长度];
示例:int[] arr = new int[5]
静态初始化在初始化时就给数组赋了值。
静态初始化格式:数据类[] 数组名 = new 数据类型[] {赋值1,赋值2,赋值3....}
示例:int[] arr = new int[]{1,2,3};
以上是完整版的静态初始化方法,除此之外也可以使用简化版
简化版:int[] arr = {1,2,3} ;
简化版与完整版的区别在于只有完整版可以将定义与初始化分开,如
int[] arr;
arr = new int[] {1,2,3};
数组在定义完成后若未赋值则系统会进行默认赋值,不同的数据类型默认值也不同
数据类型 | 关键字 | 默认值 |
整数型 | byte | 0 |
short | 0 | |
int | 0 | |
long | 0L | |
浮点型 | float | 0.0F |
double | 0.0 | |
字符型 | char | 空字符 |
布尔型 | boolean | false |
引用型 | string | null |
1.4数组元素读写
1.4.1索引
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素
1.4.2数组元素赋值
数组名[索引值] = 赋值;
示例:int[] arr = new int[3]; //定义一个拥有3个单位长度的数组;
arr[0] = 1; //将数字1赋值给数组中索引值为0的地址;
arr[1] = 2;
arr[2] = 3;
此时数组为arr ={1,2,3};
1.4.3数组元素读取
System.out.println(arr); //直接打印数组本身会输出数组的地址
System.out.println(arr[0]); //打印数组元素内容 数组名[索引] 索引 ==下标
1.5内存分配
1.5.1内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
1.5.2 JAVA中的内存分配
区域名称 | 作用 |
寄存器 | 给CPU使用,和我们开发无关。 |
本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的class文件。 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
1.5.3一个数组内存图
1.5.4 两个数组内存图
1.5.5多个数组指向相同内存图
1.6数组遍历
就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
public class ArrayTest01 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}
}
以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。
public class ArrayTest01 {
public static void main(String[] args) {
//定义数组
int[] arr = {11, 22, 33, 44, 55};//使用通用的遍历格式
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
}
二、Arraylist
2.1Arraylist介绍
ArrayList
是Java集合框架(Java Collections Framework)的一部分,它实现了List
接口。ArrayList
内部使用一个动态数组来存储元素,因此它可以像普通数组一样通过索引来访问元素。但是,与普通数组不同,ArrayList
的大小是可变的,当需要添加新元素而当前容量不足时,它会自动扩容。
2.2Arraylist使用方法
2.2.1创建Arraylist
List <String> list = new ArrayList <> () ;
2.2.2添加元素
可以使用add()
方法向ArrayList
中添加元素。
list.add ("Hello");
list.add ("World");
2.2.3访问元素
可以使用索引(从0开始)来访问ArrayList
中的元素。
String fruit = list.get(0); // 获取第一个元素
2.2.4移除元素
可以使用remove()
方法从ArrayList
中移除元素。
list.remove (0); // 移除第一个元素
2.2.5遍历元素
可以使用for-each
循环来遍历ArrayList
中的元素。
for (String arr : list) {
System.out.println(arr);}
2.3ArrayList的扩容机制
当向ArrayList
中添加元素并且当前容量不足以容纳新元素时,它会自动扩容。扩容的过程大致如下:
- 计算新的容量:新的容量通常是原容量的1.5倍(这取决于具体的JVM实现)。但是,如果新的容量仍然小于需要添加的元素数量加上当前容量,那么新的容量将是所需的最小容量。
- 创建一个新的数组,其容量为计算出的新容量。
- 将旧数组中的元素复制到新数组中。
- 将
ArrayList
的内部数组引用指向新数组。
需要注意的是,扩容操作可能会导致性能问题,因为每次扩容都需要创建新的数组并复制旧数组中的元素。因此,如果知道大概会向ArrayList
中添加多少元素,最好在创建ArrayList
时就指定一个足够大的初始容量。