Java——引用数据类型—数组

一.数组

1.一维数组

含义:一组数据的容器

作用:存储多个数据

数组的声明:

​ 数据类型[] 数组名/变量名;

注意:

  1. 数组是引用数据类型

  2. 数组中的数据,称之为元素

  3. 每个元素都有编号,称之为下标/索引

  4. 下标从0开始

  5. 下标的作用:通过下标可以定位到数组中的某个位置

  6. 数组一旦初始化成功,长度将不可改变

  7. 操作数组:

    改 - 通过下标设置元素
    查 - 通过下标获取元素
    查 - 获取元素个数
    查 - 遍历数组

数组的初始化:

静态初始化:数据由程序员给定,长度由系统分配

public class Test{
	public static void main(String[] args){
	
		//静态初始化一
		//String[] names = new String[]{"AA","BB","CC","DD","EE"};
		
		//静态初始化二(先声明再初始化)
		//String[] names;
		//names = new String[]{"AA","BB","CC","CC","DD"};
		
		//静态初始化三(简化写法1)
		String[] names = {"AA","BB","CC","DD","EE"};
		
		//通过下标设置元素
		names[2] = "FF";
		
		//ArrayIndexOutOfBoundsException - 数组下标越界异常
		//下标从0开始,不超过数组的长度
		//names[5] = "xxx";
		
		
		//通过下标获取元素
		String str = names[2];
		System.out.println("通过下标获取元素:" + str);
		
		//获取元素个数
		int len = names.length;
		System.out.println("获取元素个数:" + len);//5
		
		System.out.println("-----------");
		
		//遍历数组 -- for循环
		for(int i = 0;i<names.length;i++){
			System.out.println(names[i]);
		}
		
		System.out.println("-----------");
		
		//遍历数组 -- foreach/增强for循环
		for(String element : names){//依次将元素赋值给element
			System.out.println(element);
		}
		
		/**
			for vs foreach
				遍历时,使用到下标 -- for
				遍历是,不使用下标 -- foreach
		*/
		
	}
	
}

动态初始化:

长度由程序员给定,数据由系统分配默认值

整数类型:0
浮点类型:0.0
字符类型:’ ’
布尔类型:false
引用类型:null(空)

public class Test{
	public static void main(String[] args){
	
		//动态初始化一
		//String[] names = new String[5];//5-数组的的长度
		
		//动态初始化二(先声明再初始化)
		String[] names;
		names = new String[5];
		
		//通过下标设置元素
		names[0] = "AA";
		names[1] = "BB";
		names[2] = "CC";
		names[3] = "DD";
		names[4] = "EE";
		
		//ArrayIndexOutOfBoundsException - 数组下标越界异常
		//下标从0开始,不超过数组的长度
		//names[5] = "xxx";
		
		
		//通过下标获取元素
		String str = names[2];
		System.out.println("通过下标获取元素:" + str);
		
		//获取元素个数
		int len = names.length;
		System.out.println("获取元素个数:" + len);//5
		
		System.out.println("-----------");
		
		//遍历数组 -- for循环
		for(int i = 0;i<names.length;i++){
			System.out.println(names[i]);
		}
		
		System.out.println("-----------");
		
		//遍历数组 -- foreach/增强for循环
		for(String element : names){//依次将元素赋值给element
			System.out.println(element);
		}
		
		/**
			for vs foreach
				遍历时,使用到下标 -- for
				遍历是,不使用下标 -- foreach
		*/
		
	}
	
}

一维数组的应用:

需求:创建一个int数组,长度让用户指定,数据有用户输入,获取数组中的最大值

import java.util.Scanner;
public class Test{
	public static void main(String[] args){
	
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入数组的长度:");
		int len = scan.nextInt();
		
		if(len <= 0){
			System.out.println("长度有误~~");
			return;
		}
	
		//动态初始化数组
		int[] is = new int[len];
		
		//循环输入
		for(int i = 0;i<is.length;i++){
			System.out.println("请输入第" + (i+1) + "个数字:");
			int num = scan.nextInt();
			is[i] = num;
		}
		
		//获取数组中的最大值
		
		int max = is[0];//假设数组第一个元素为最大值
		for(int i = 1;i<is.length;i++){
			if(max < is[i]){
				max = is[i];
			}
		}	
		System.out.println("最大值为:" + max);	
	}	
}
1.1 冒泡排序
public class Test{
	/**
        N个数字来排队
        两辆相比小靠前
        外层循环N-1
        内层循环N-1-i
	*/
	public static void main(String[] args){
		
		int[] nums = {81,23,56,18,33,9};
		
		for(int i = 0;i<nums.length-1;i++){
			for(int j = 0;j<nums.length-1-i;j++){
				if(nums[j] > nums[j+1]){
					int temp = nums[j];
					nums[j] = nums[j+1];
					nums[j+1] = temp;
				}
			}
		}
		
		for(int element : nums){
			System.out.println(element);
		}
		
	}
	
	
}
1.2 线性查找/顺序查找
public class Test{
	public static void main(String[] args){
		
		int[] nums = {81,23,56,18,33,9};
		
		int num = 18;//需要查找的值
		
		for(int i = 0;i<nums.length;i++){
			if(nums[i] == num){
				System.out.println("找到元素了,下标为:" + i);
				break;
			}
		}
	}
	
	
}
1.3 二叉查找/二分法查找
import java.util.Arrays;
public class Test{
	/**
		知识点:数组的查找 -- 二叉查找/二分法查找
		
		注意:必须先排序
		
	*/
	public static void main(String[] args){
		
		int[] nums = {81,23,56,18,33,9};
		
		int num = 18;//需要查找的值
		
		//数组的排序 -- 9,18,23,33,56,81
		Arrays.sort(nums);
		
		int start = 0;
		int end = nums.length-1;
		
		while(start <= end){
			int mid = (start+end)/2;
			
			if(nums[mid] > num){
				end = mid-1;
			}else if(nums[mid] < num){
				start = mid+1;
			}else{
				System.out.println("找到元素了,下标为:" + mid);
				break;
			}
			
		}
		
	}

}
1.4 数组的复制
public class Test{
	/**
		知识点:数组的复制1
		
		缺点:修改源数组,新数组也会发生改变
		
	*/
	public static void main(String[] args){
		
		//源数组
		String[] names = {"AA","BB","CC","DD"};
		
		//新数组
		String[] newNames = names;
		
		//修改源数组的数据
		names[1] = "EE";
		
		//遍历新数组
		for(String str : newNames){
			System.out.println(str);
		}
		
	}
}
public class Test{
	/**
		知识点:数组的复制2		
	*/
	public static void main(String[] args){
		
		//源数组
		String[] names = {"AA","BB","CC","DD"};
		
		//新数组
		String[] newNames = new String[names.length];
		
		//数据的复制
		for(int i = 0;i<names.length;i++){
			newNames[i] = names[i];
		}
		
		//修改源数组的数据
		names[1] = "EE";
		
		//遍历新数组
		for(String str : newNames){
			System.out.println(str);
		}
		
	}
}
1.5 数组的扩容
public class Test{
	/**
		知识点:数组的扩容	

		扩容机制:原来长度的1.5
	*/
	public static void main(String[] args){
		
		//源数组
		String[] names = {"AA","BB","CC","DD"};
		
		//老的长度
		int oldCapacity = names.length;
		//新的长度
		int newCapacity = oldCapacity + (oldCapacity >> 1);
		
		//创建新数组
		String[] newNames = new String[newCapacity];
		
		//将源数组的数据复制到新数组中
		for(int i = 0;i<names.length;i++){
			newNames[i] = names[i];
		}
		
		//将新数组的地址复制给源数组
		names = newNames;
		
		//遍历源数组
		for(String str : names){
			System.out.println(str);
		}		
	}
}
1.6 数组的删除
public class Test{
	/**
		知识点:数组的删除1
	*/
	public static void main(String[] args){
		
		//源数组
		String[] names = {"AA","BB","CC","DD"};//0,1,2,3
		
		//创建新数组
		String[] newNames = new String[names.length-1];//0,1,2
		
		//遍历源数组,将除了"BB"的元素都放入新数组中
		int index = 0;
		for(String element : names){
			if(!element.equals("BB")){
				newNames[index++] = element;
			}
		}
		
		//将新数组的引用复制给原数组
		names = newNames;
		
		//遍历源数组
		for(String element : names){
			System.out.println(element);
		}
	}
}
public class Test{
	/**
		知识点:数组的删除2
	*/
	public static void main(String[] args){
		
		//源数组
		String[] names = {"AA","BB","CC","DD"};//0,1,2,3
		
		//数据的迁移
		for(int i = 1;i<names.length-1;i++){
			names[i] = names[i+1];
		}
		
		//把最后一个元素置为null
		names[names.length-1] = null;
		
		//遍历源数组
		for(String element : names){
			System.out.println(element);
		}
	}
}

2. Arrays工具类——专门操作数组的工具类

Simport java.util.Arrays;
public class Test11{
	/**
		知识点:Arrays工具类
		含义:Java给我们提供的专门操作数组的工具类
		
		工具类的概念:该类中所有的方法都是静态的,直接使用类名调用
		API的概念:Java提供类的说明书(放在桌面去,方便我们查询)
		
	*/
	public static void main(String[] args){
		
		int[] nums = {81,23,56,18,33,9};
		
		//排序 -- 9,18,23,33,56,81
		Arrays.sort(nums);
		
		//查找
		//返回值:搜索键的索引,如果它包含在数组中;否则, (-(insertion point) - 1) 
		//返回值:如果查找的值在数组中,就返回下标;否则,返回(-插入点-1)
		int index = Arrays.binarySearch(nums,40);
		System.out.println(&quot;查找元素的下标为:&quot; + index);
		
		//拷贝数组(目标数组,新的长度)
		int[] arr1 = Arrays.copyOf(nums,nums.length*2);
		
		//拷贝数组(目标数组,开始下标-包含,结束下标-不包含)
		int[] arr2 = Arrays.copyOfRange(arr1,2,8);
		
		//替换(目标数组,要替换的值)
		Arrays.fill(arr2,888);
		
		//替换(目标数组,开始下标-包含,结束下标-不包含,要替换的值)
		Arrays.fill(arr2,1,4,666);
	
		//将数组转换为字符串 -- [23,33,56,81,0,0]
		System.out.println(Arrays.toString(arr2));
	}
}

2.二维数组

2.1 静态初始化

public class Test{
	/**
		知识点:二维数组
		
		含义:包含了多个一维数组
		
		数组的声明:
			数据类型[][] 数组名;

	*/
	public static void main(String[] args){
		
		//静态初始化一
		//String[][] names = new String[][]{{"AA","BB","CC"},{"DD","EE","FF","GG"}};
		
		//静态初始化二(先声明,再初始化)
		//String[][] names;
		//names = new String[][]{{"AA","BB","CC"},{"DD","EE","FF","GG"}};
		
		//静态初始化三(简化写法一)
		String[][] names = {{"AA","BB","CC"},{"DD","EE","FF","GG"}};
		
		//设置指定下标上的元素
		names[1][1] = "NN";
		
		//获取指定下标上的元素
		String str = names[1][1];
		System.out.println("获取指定下标上的元素:" + str);
		
		//获取长度
		System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
		System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
		System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//4
		
		System.out.println("-----------");
		
		//遍历思路:先循环取出二维数组中的一维数组,再循环取出一维数组中的元素
		
		//遍历数组 -- for
		for(int i = 0;i<names.length;i++){
			for(int j = 0;j<names[i].length;j++){
				System.out.println(names[i][j]);
			}
		}
		
		System.out.println("-----------");
		
		//遍历数组 -- foreach
		for(String[] ss : names){
			for(String element : ss){
				System.out.println(element);
			}
		}
	
	}
}

2.2 动态初始化

public class Test{
	/**
		知识点:二维数组
		
		含义:包含了多个一维数组
		
		数组的声明:
			数据类型[][] 数组名;

	*/
	public static void main(String[] args){
		
		//动态初始化一
		//String[][] names = new String[2][3];//2-创建2个一维数组  3-每个一维数组有3个元素
		
		//动态初始化二(先声明,再初始化)
		String[][] names;
		names = new String[2][3];//2-创建2个一维数组  3-每个一维数组有3个元素
		
		
		//设置指定下标上的元素
		names[0][0] = "aa";
		names[0][1] = "bb";
		names[0][2] = "cc";
		names[1][0] = "dd";
		names[1][1] = "ee";
		names[1][2] = "ff";
		
		//获取指定下标上的元素
		String str = names[1][1];
		System.out.println("获取指定下标上的元素:" + str);
		
		//获取长度
		System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
		System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
		System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//4
		
		System.out.println("-----------");
		
		//遍历思路:先循环取出二维数组中的一维数组,再循环取出一维数组中的元素
		
		//遍历数组 -- for
		for(int i = 0;i<names.length;i++){
			for(int j = 0;j<names[i].length;j++){
				System.out.println(names[i][j]);
			}
		}
		
		System.out.println("-----------");
		
		//遍历数组 -- foreach
		for(String[] ss : names){
			for(String element : ss){
				System.out.println(element);
			}
		}
	
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,数组是一种用于存储多个相同类型的数据的数据结构。数组的用法包括声明、初始化、访问和遍历。 1. 声明数组:可以使用以下方式声明数组: - `int[] arr;`:声明一个整型数组 - `String[] names;`:声明一个字符串数组 - `double[] scores;`:声明一个双精度浮点数数组 2. 初始化数组:可以使用以下方式初始化数组: - `arr = new int;`:初始化一个长度为5的整型数组 - `names = new String[]{"Alice", "Bob", "Charlie"};`:初始化一个包含指定元素的字符串数组 - `scores = {98.5, 87.0, 92.5};`:简化形式的初始化数组 3. 访问数组:可以使用索引来访问数组中的元素,索引从0开始计数。例如,`arr`表示数组中的第一个元素,`names`表示数组中的第三个元素。 4. 遍历数组:可以使用循环结构来遍历数组中的所有元素。例如,可以使用for循环来遍历整型数组: ``` for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` 5. 数组拷贝:可以使用`System.arraycopy()`方法或`Arrays.copyOf()`方法来进行数组的拷贝操作。 6. 数组排序:可以使用`Arrays.sort()`方法对数组进行排序。 7. 不规则数组Java中也支持不规则数组,即数组中的元素可以是数组。例如,可以创建一个二维数组`int[][] array`,其中每个元素都是一个一维数组。可以通过循环嵌套来遍历和访问不规则数组中的元素。 以上是Java数组的基本用法。可以根据具体的需求和情况使用数组来存储和处理数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java——数组的使用](https://blog.csdn.net/qq_59599094/article/details/127728786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值