5.java-数组

概念

数组介绍:相同类型的数据按照一定顺序排列的集合。数组也是一组数据类型,是引用类型 。数组在内存中以连续的内存块进行存储。

数组的长度: arr.length,数组最后位是arr[arr.length-1]

定义与初始化

定义
  1. 数据类型 数组名[] = new 数据类型[数组长度]; 数据类型[] 数组名= new 数据类型[数组长度]也是可以的。

    这样定义数组中的元素是默认值。

    java 复制代码
    数据类型          				默认值
    --------------------------------------------
    byte, short, int, long         0
    double, float                  0.0
    boolean                        false
    char                           \u0000
    引用数据类型                     null(空值)
  2. 也可以先声明,再分配空间

    java 复制代码
    数据类型[] 数组名;
    数组名 = new 数据类型[数组长度];
  3. 静态初始化:

    数据类型[] 数组名 = {n1, n2, n3 ... }

    数据类型[] 数组名 = new 数据类型[]{n1, n2, n3 ... }

  4. 数组的数据类型是引用类型,所以数组变量存储是一个地址,这个地址指向堆内存的一块内存。所以数组一但创建,内存中的长度是固定的,无法更改这块内存的长度。

使用细节:

1.数组中的元素可以进行自动转换。

2.数组属于引用类型,数组型数据是对象

Java 中的[]运算符被预定义为检查数组边界,而且没有指针运算,即不能通过a加1得到数组的下一个元素。

数组赋值机制

基本数据 类型赋值机制是值拷贝。

数组在默认情况下是引用传递,变量里存储的是地址,指向创建的数组,也就是说数组就是一个在堆内存区创建一个对象。

数组操作:

java 复制代码
import java.util.Arrays;

public class Array02 {
	
	public static void main(String[] args){
		copyArr();
		revArr();
		addArr();
		delArr();
	}
	
	public static void addArr(){
		//定义一个新的数组,长度oldArr.length+1,
		//向新的元素赋值给新数组(最后一位);
		//将原来的变量指向新数组
		int addItem = 10;
		int[] arr1 = {1, 3, 4, 5, 6};
		printArr(arr1, "原来的数组是:");
		int[] temp = new int[arr1.length + 1];
		temp[arr1.length] =  addItem;
		for(int i = 0; i < temp.length; i++){
			if(i <= arr1.length - 1){
				temp[i] = arr1[i];
			}
		}
		arr1 = temp;
		printArr(arr1, "增加元素后是:");
	}
	
	public static void delArr(){
		//定义一个新的数组, 长度oldArr.length-1,
		//获取原来数组中的前oldArr.length-1位的值赋给新数组;
		//将原来的变量指向新数组;
		int[] arr1 = {1, 3, 4, 5, 6};
		printArr(arr1, "原来的数组是:");
		int[] temp = new int[arr1.length - 1];
		for(int i = 0; i < temp.length; i++){
			temp[i] = arr1[i];
		}
		arr1 = temp;
		printArr(arr1, "删除元素后是:");
		
	}
	
	
	//翻转数组
	public static void revArr(){
		int[] arr1 = {1, 3, 4, 5, 6};
		for(int i = 0; i < (arr1.length / 2); i++){
			int temp = arr1[i];
			arr1[i] = arr1[(arr1.length - 1)-i];
			arr1[(arr1.length - 1)-i] = temp;
		}
		printArr(arr1, "");
	}
	
	//复制数组
	public static void copyArr(){
		int[] arr1 = {1, 3, 4, 5, 6};
		//数组直接赋值,赋值的是地址。两个变量指向同一个内存
		int[] arr2 = arr1;
		arr2[2] = 5;
		System.out.println(arr2[2]);
		System.out.println(arr1[2]);
		
		int[] arr3 = Arrays.copyOf(arr1, arr1.length);
		arr3[2] = 10;
		System.out.println(arr3[2]);
		System.out.println(arr2[2]);
		System.out.println(arr1[2]);
	}
	
	//打印数组
	public static void printArr(int[] arr, String str){
		System.out.println(str);
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
}

for(item: conllection){ } collection这一集合表达式必须是一个数组或者是一个实现了Iterable 接口的类对象(例如ArrayList)。

在Java中,允许数组长度为0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。此时可以创建一个长度为0的数组:

new elementType[0]; //注意,数组长度为0与null 不同。

多维数组(二维):

静态初始化

数据类型[][] 数组名 = {``{...}, {...}, {...}};

动态初始化

数据类型[][] 数组名 = new 类型[长度][长度]

java 复制代码
数据类型[][] 数组名 
数组名 = new 类型[长度][长度]; 第二位的长度可以不写,表示第二位不确定。
   
数据类型[] 数组名[]
数据类型 数组名[][]
遍历

for循环嵌套遍历

列数不确定:

在java中,二维数组中的(第二列)不是确定的,例如:

代码实现

java 复制代码
import java.util.Arrays;

public class Array03 {
	
	public static void main(String[] args){
		int[][] arr = new int[3][];
		for(int i = 0; i < arr.length; i++){
			arr[i] = new int[i + 1];
			for(int j = 0; j < arr[i].length; j++){
				arr[i][j] = i + 1;
			}
		}
		for(int i = 0; i < arr.length; i++){
			for(int j = 0; j < arr[i].length; j++){
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
	}

}
相关推荐
星夜离尘5644 分钟前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
_Evan_Yao1 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
Ai-_Man1 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
梓豪csd1 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼1 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
学逆向的2 小时前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_2 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
thefool1122662 小时前
TCP 1
java·1024程序员节
金銀銅鐵4 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手5 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务