day05-数组
1.一维数组的基本概念
- 当需要在Java程序中记录单个数据内容时,则声明一个变量即可。
- 当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数组即可,一维数组本质上就是在内存空间中申请一段连续的存储单元。
- 数组是相同数据类型的多个元素的容器,元素按线性顺序排列,在Java语言中体现为一种引用数据类型。
2.一维数组的声明方式
- 数据类型[] 数组名称 = new 数据类型[数组的长度];
- 调用数组的length属性可以获取数组的长度;
- 可以通过下标的方式访问数组中的每一个元素。需要注意的是:数组的下标从0开始,对于长度为n的数组,下标的范围是0~n-1.
3.一维数组的使用
package com.lagou.Day05;
/**
* 一维数组
*/
public class Demo01 {
public static void main(String[] args) {
//1.声明一个长度为2元素类型为int类型的一维数组
int[] arr = new int[2];
//2.打印一维数组的长度以及每个元素的数值
System.out.println(arr.length);//2
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
//数组下标越界异常
//System.out.println(arr[2]);//java.lang.ArrayIndexOutOfBoundsException
System.out.println(arr);//[I@3f0ee7cb
//遍历
for (int i =0;i<arr.length;i++){
System.out.println(arr[i]);//0 0
}
}
}
4.一维数组的初始化
- 基本类型的数组(数据元素为基本类型)创建后,其元素的初始值:byte、short、char、int、long为0;
- float和double为0.0;
- boolean为false;
package com.lagou.Day05;
public class Demo02 {
public static void main(String[] args) {
//声明一个长度为5元素类型为double类型的一维数组 动态方式
double[] arr = new double[5];
//打印数组中每个元素值
for (int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
//赋值 静态方式简化版
char[] arr2 = {'a','b','c','d'};
for (int i = 0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
//特殊写法 静态方式
boolean[] arr3 = new boolean[]{true,true,false,false};
for (int i = 0;i<arr3.length;i++){
System.out.println(arr3[i]);
}
}
}
5.内存结构分析
内存结构之栈区
- 栈用于存放程序运行过程当中所有的局部变量。一个运行的Java程序从开始到结束会有多次变量的声明。
内存结构之堆区
- JVM会在其内存空间中开辟一个称为“堆”的存储空间,这部分空间用于存储使用new关键字创建的数组和对象。
6.一维数组CRUD之声明和赋值操作
package com.lagou.Day05;
/**
* 编程实现一维数组的增删改查
*/
public class Demo03 {
public static void main(String[] args) {
//1.声明一个长度为5类型为int的一维数组
int[] arr = new int[5];
//2.对数组前4个赋值11、22、33、44
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
arr[3] = 44;
for (int i =0;i<arr.length-1;i++){
arr[i] =(i+1)*11;
}
}
}
7.一维数组插入操作
package com.lagou.Day05;
/**
* 将元素55插入到下标为0到位置,原有元素向后移动
*/
public class Demo04 {
public static void main(String[] args) {
int[] arr = new int[5];
//原有的
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
arr[3] = 44;
//现在插入
//方法一
arr[4] = arr[3];
arr[3] = arr[2];
arr[2] = arr[1];
arr[1] = arr[0];
arr[0] = 55;
//方法二
for (int i=arr.length-1;i>0;i--){
arr[i] = arr[i-1];
}
arr[0] = 55;
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
8.一维数组CRUD删除操作
package com.lagou.Day05;
public class Demo05 {
public static void main(String[] args) {
//现在的元素[55,11,22,33,44]
//将55删除,11,22,33,44向前靠近,最后一个为0
int[] arr = {55,11,22,33,44};
arr[0]=arr[1];
arr[1]=arr[2];
arr[2]=arr[3];
arr[3]=arr[4];
arr[4]=0;
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
9.一维数组CRUD改操作
package com.lagou.Day05;
/**
* 查找数组中是否含有22?把22改成220
*/
public class Demo06 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,0};
for (int i=0;i<arr.length;i++){
if (22 == arr[i]){
arr[i]=220;
break;
}
System.out.println(arr[i]);
}
}
}
10.一维数组的优缺点
- 可以直接通过下标(或索引)的方式访问指定位置的元素,速度很快。
- 数组要求所有的元素的类型都相同。
- 数组要求内存空间连续,并且长度一旦确定就不能修改。
- 增加和删除元素时可能移动大量元素,效率低。
11.一维数组之间元素的拷贝实现
- 声明一个初始值为11,22,33,44,55的一维数组并且打印所有元素
- 声明一个长度为3元素类型为int类型的一维数组并打印所有元素
- 实现将第一个数组中间3个元素赋值到第二个数组中
- 再次打印第二个数组中的所有元素
package com.lagou.Day05;
/**
* - 声明一个初始值为11,22,33,44,55的一维数组并且打印所有元素
* - 声明一个长度为3元素类型为int类型的一维数组并打印所有元素
* - 实现将第一个数组中间3个元素赋值到第二个数组中
* - 再次打印第二个数组中的所有元素
*/
public class Demo07 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
int[] arr2 = new int[3];
for (int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
arr2[0]=arr[1];
arr2[1]=arr[2];
arr2[2]=arr[3];
for (int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
}
}
12.一维数组之间元素的拷贝优化
package com.lagou.Day05;/** * - 声明一个初始值为11,22,33,44,55的一维数组并且打印所有元素 * - 声明一个长度为3元素类型为int类型的一维数组并打印所有元素 * - 实现将第一个数组中间3个元素赋值到第二个数组中 * - 再次打印第二个数组中的所有元素 */public class Demo07 { public static void main(String[] args) { int[] arr = {11,22,33,44,55}; for (int i=0;i<arr.length;i++){ System.out.println(arr[i]); } int[] arr2 = new int[3]; //方式2 for (int i=0;i<arr2.length;i++){ System.out.println(arr2[i]); } //方式3 System.arraycopy(arr,1,arr2,0,3); for (int i=0;i<arr2.length;i++){ arr2[i]=arr[i+1]; System.out.println(arr2[i]); } }}