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

}
相关推荐
Java后端的Ai之路1 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang1 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人1 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
郑州光合科技余经理2 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071572 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat2 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源2 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog2 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
Dovis(誓平步青云)2 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑