栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数组基础知识:数组动态初始化、数组拷贝、数组反转、数组扩容

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组基础知识:数组动态初始化、数组拷贝、数组反转、数组扩容

系列文章目录

文章目录
  • 系列文章目录
  • 前言
  • 一、数组介绍
  • 二、数组的使用
    • 1.分配方式
    • 2. 数组使用注意事项和细节
    • 3. 数组赋值机制
    • 4.数组拷贝
    • 5.数组反转
    • 6.数据扩容
  • 总结


前言
数组的基础知识,容易遗忘,特记录

一、数组介绍

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。

数组是从0开始编号的
可以通过数组名.length得到数组的大小长度

二、数组的使用 1.分配方式
数据的引用(使用/访问/索引)
数组的下标从0开始

数组分配方式
第一种动态
double scores[] = new double[5];
第二种动态
Double scores[];//声明数组,这时 scores 是 null
Scores = new double[5];//分配内存空间可以存放数据

第三种静态初始化
	Int a[] = {2.2.4.5.6.34.56};

不同情况下用不同方式

代码如下(示例):
double[] scores = new double[5] 和 double scores[] = new double[5] 等价

	Scanner myScanner = new Scanner(System.in);
	for( int i= 0;  i<= score.length;i++){
		System.out.println("第" + (i+1) + "个元素的值=");
		Scores[i] = myScanner.nextDouble();
	}
2. 数组使用注意事项和细节
  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  3. 数组创建后,如果没有赋值,有默认值
    int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char u0000,boolean false,String null
  4. 使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
  5. 数组的下标是从 0 开始的。
  6. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如

提示:char 类型数据运算 ‘A’+1 -> 'B

  1. 定义一个 数组 char[] chars = new char[26]
  2. 因为 ‘A’ + 1 = ‘B’ 类推,所以使用 for 来赋值
  3. 使用 for 循环访问所有元素
char[] chars = new char[26]; 
for( int i = 0; i < chars.length; i++) {//循环 26 次 
//chars 是 char[] 
//chars[i] 是 char 
chars[i] = (char)('A' + i); //'A' + i 是 int , 需要强制转换 
}
3. 数组赋值机制
  1. 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
    int n1 = 2; int n2 = n1;
  2. 数组在默认情况下是引用传递,赋的值是地址。
    int[] arr1 = {1,2,3};
    int[] arr2 = arr1;
    arr2[0] = 10;
    (可以两个数组都指向一个地址,要是一个改值,另外一个查询到的也是这个,都变了)
    输出为10,2,3
4.数组拷贝
Int[] arr1 = {10,2,30};
Int [] arr2 = arr1;//这个不叫拷贝,这个数据是共享的,不是独立的

	
	
	int[] arr1 = {10,20,30}; 
	//创建一个新的数组 arr2,开辟新的数据空间 
	//大小 arr1.length; 
	int[] arr2 = new int[arr1.length];
	
	
	//遍历 arr1 ,把每个元素拷贝到 arr2 对应的元素位置 
	for(int i = 0; i < arr1.length; i++) { 
		arr2[i] = arr1[i]; 

5.数组反转

数据元素内容反转

方式1:通过找规律反转

		 int temp = 0;
				int len = arr.length;//计算数组的长度
				for(int i =0;i
				    temp = arr[arr.length -1-i];//保存
					arr[arr.length -1-i] = arr[i];
					arr[i]=temp;

方式2:使用逆序赋值方式
先创建一个新的数组 arr2,将每个元素拷贝到 arr2 的元素中(顺序拷贝)

		int[] arr = {11,22,33,44,55,66};
				int[] arr2 = new int[arr.length];
				for(int i=arr.length-1,j=0;i>=0;i--,j++){
						arr2[j]=arr[i];
				}
				for(int z=0;z<=arr2.length-1;z++){
				
					System.out.println(arr2[z]+" ");
				}

Arr=arr2;
当用了这条命令后,
如上图,arr的地址和arr2一样,链接到了0x22,而0x11地址没有变量引用,被注销

6.数据扩容

思路分析
1. 定义初始数组 int[] arr = {1,2,3}//下标 0-2
2. 定义一个新的数组 int[] arrNew = new int[arr.length+1];
3. 遍历 arr 数组,依次将 arr 的元素拷贝到 arrNew 数组
4. 将 4 赋给 arrNew[arrNew.length - 1] = 4;把 4 赋给 arrNew 最后一个元素
5. 让 arr 指向 arrNew ; arr = arrNew; 那么 原来 arr 数组就被销毁
6. 创建一个 Scanner 可以接受用户输入
7. 因为用户什么时候退出,不确定,老师使用 do-while + break 来控制

arr最后会被销毁

		mport java.util.Scanner;
		public class HelloWorld {
		    public static void main(String []args) {
				Scanner myScanner = new Scanner(Syetem.in);
				int[] arr = {11,22,33};
				
				do{
					int[] arrnew = new int[arr.length+1];
					for(int i = 0;i
						arrnew[i]=arr[i];
					}
					System.out.println("请输入你要添加的元素");
					int addnum=myScanner.NextInt();
					//把arr指向arrnew最后一个元素
					arrnew[arrnew.length-1] = addnum;
					
					//让arr指向arrnew
					arr = arrnew;
					//输出arr 看看效果
					for(int i = 0;i
							System.out.print(arrnew[i] + "t");
					}
					//问用户是否继续
					System.out.println("是否继续添加 y/n");
					char key = myScanner.next().charAt(0);
					if(key == 'n'){
					   //如果输入n,就结束
					  	 break;
					   }
				}while(true);
				System.out.println("您已退出添加...");
		    }
		}



不好的地方,就是:数组每次添加一个,就会得找一个新数组把之前几个位置的数据再粘贴过来、不如链表好用


总结

之后还有

部分图文字 来自韩顺平老师课堂笔记

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号