数组的基本使用

一、数组的使用

一、1、使用方式1-动态初始化

数组的定义

语法:数据类型 数组名[]=new 数据类型[大小]
int a[] =new int [5];   //创建了一个数组,名字为a,存放5个int数据
也可以这样写,作用是一样的
int[] a=new int[5];

一、2、使用方式2-动态初始化(先声明)

1. 先声明数组
语法:数据类型 数组名[];
int a[];
或者:int[] a;
2.创建数组
语法:数组名=new 数据类型[大小]
a=new int[10];

一、3、使用方式3-静态初始化

语法:数据类型 数组名[]={元素值,元素值...}
int a[]={2,4,6,3,5,1};
等同于
int a[]=new int[6];
a[0]=2;a[1]=4;a[2]=6;a[3]=3;a[4]=5;a[5]=1;

一、4、数组的注意事项

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包基本数据类型和引用数据类型,但不能混用。
  3. 数组创建后,如果没有赋值,默认值为0
  4. 数组的下标从0开始
  5. 数组属于引用类型,数组型的数据本质是对象

一、5、数组的赋值机制

  1. 基本数据类型赋值,这个值就是具体的数据,而且相互不影响
  2. 数组在默认情况下是引用传递,赋的值是地址
    简单来说上面的arr2=arr1;实际上就是arr2指向arr1的数组空间里面,就是说arr2和arr1指向同一个空间,二者之间的改变会相互影响,因为它们是指向同一个空间的,改变的内容也是同一个内容。(可以理解为一个房间给两个人一起使用)

代码:

public static void main(String[] args) {
        int n1=2;
        int n2=5;
        n2=n1;
        System.out.println("n2="+n2);

        int[] arr1={1,2,3};
        int[] arr2=arr1;
        System.out.println("遍历输出arr2");
        for (int i :arr2) {
            System.out.println(i);
        }

    }

运行结果:

n2=2
遍历输出arr2
1
2
3

在这里插入图片描述

一、6、数组的拷贝

public static void main(String[] args) {
        int[] arr1={20,23,41,51,56};
        int[] arr2=new int[arr1.length];
        System.out.println("数组的拷贝");
       for (int i=0;i<arr1.length;i++){
           arr2[i]=arr1[i]; //实际上就是把数组arr1[]的每个值都赋值给数组arr2[]
       }
        System.out.println("遍历输出数组arr2");
       for (int i=0;i<arr2.length;i++){
           System.out.print(arr2[i]+" ");
       }

    }

一、7、数组的翻转

一、7.1、方法一

  1. 解题思路:
    • 把arr[0]和arr[5]进行交换
    • 把arr[1]和arr[4]进行交换
    • 把arr[2]和arr[3]进行交换
    • 一个交换3次=arr.length/2;每次交换时,对应的下标为arr[i] 和arr[arr.length-1-i]
public static void main(String[] args) {

        int[] a=new int[6];
        //这里的Random.nextInt(100)是随机产生100以内的整数
        for (int i=0;i<a.length;i++){
            a[i]=new Random().nextInt(100);
        }

        System.out.println("===没有变之前的数组===");
        for (int i=0;i<a.length;i++){
            System.out.println("a["+i+"]="+a[i]);
        }

        for (int i=0;i<a.length/2;i++){
        //声明一个变量来存放要交换的值
            int temp=a[a.length-1-i];
            a[a.length-1-i]=a[i];
            a[i]=temp;
        }
        System.out.println("===改变之后的数组===");
        for (int i=0;i<a.length;i++){
            System.out.println("a["+i+"]="+a[i]);
        }
    }

运行结果:

===没有变之前的数组===
a[0]=72
a[1]=48
a[2]=83
a[3]=57
a[4]=20
===改变之后的数组===
a[0]=20
a[1]=57
a[2]=83
a[3]=48
a[4]=72

一、7.2、方法二

  1. 解题思路:
    • 使用逆序赋值方式
    • 1.先创建一个新的数组arr2,大小为arr1.length
    • 2.逆序遍历arr1,将每个元素拷贝到arr2的元素中去(顺序拷贝)
    • 3.建议增加一个循环变量j->0->arr1.length
    • 4.把arr1指向arr2数据空间
      • 此时arr1原来的数据空间就没有变量引用,会被当作垃圾销毁。

代码:

public static void main(String[] args) {
        int[] arr1=new int[5];
        for (int i=0;i<5;i++){
            arr1[i]=new Random().nextInt(100);
        }
        System.out.println("===没有变之前的数组===");
        for (int i=0;i<arr1.length;i++){
            System.out.println("a["+i+"]="+arr1[i]);
        }
        int[] arr2=new int[arr1.length];
        for (int i=arr1.length-1,j=0;i>=0;i--,j++){
            arr2[j]=arr1[i];
        }
        arr1=arr2;
        System.out.println("===改变之后的数组===");
        for (int i=0;i<arr1.length;i++){
            System.out.println("a["+i+"]="+arr1[i]);
        }
    }

运行结果:

===没有变之前的数组===
a[0]=72
a[1]=10
a[2]=20
a[3]=12
a[4]=8
===改变之后的数组===
a[0]=8
a[1]=12
a[2]=20
a[3]=10
a[4]=72

一、8、数组扩容

思路分析
   1.初始化一个数组 int[] a={1,2,3};
   2.定义一个新的数组 int[] b=new int[a.length+1]
   3.遍历a数组,一次将a数组的值拷贝到b数组
   4.将要新添加的元素赋值给b[b.length-1](就是把值赋给b数组的最后一个元素)
   5.让a指向b,那么原来的a数组就被销毁了
   6.中间加个条件判断,那样就可以控制增加的元素的个数了

代码:

public static void main(String[] args) {
		
		Scanner my=new Scanner(System.in);
		
		int[] a= {1,2,3};
		do {
			int[] b=new int[a.length+1];
			for(int i=0;i<a.length;i++) {
				b[i]=a[i];	
			}
			System.out.print("请输入你要添加的元素:");
			int num=my.nextInt();
			b[b.length-1]=num;
			a=b;
			for(int i=0;i<a.length;i++) {
				System.out.print(a[i]+" ");
			}
			System.out.println();
			System.out.print("是否继续添加元素(y/n):");
			char key=my.next().charAt(0);
			if(key=='n') {
				break;
			}
		}while(true);
	}

运行结果:

请输入你要添加的元素:4
1 2 3 4 
是否继续添加元素(y/n):n
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值