Java 数组简单介绍

数组简单介绍

  • 数组是一种引用类型

  • 数组是一种简单的数据结构线性的结构

  • 数组是一个容器,可以用来存储其他元素,数组可以存储任意数据类型的元素

    • 数组中存储的元素的类型是统一的。
  • 数组分为:一维数组、多维数组

  • 数组长度不可以改变

    • 数组一旦创建,对应的长度是固定的,不可变的。
  • 数组的索引效率较高,增删元素的效率较低(涉及到元素的移动)

一维数组初始化

初始化以为数组有两种方式:

  • 静态初始化

    int[] a1 = {1, 2 3, 5};
    
  • 动态初始化

    • 会先再堆内存中分配这个数组,并且数组中的每一个元素都采用默认值
      • byte short int long 0
      • float double 0.0
      • boolean false
      • char \u0000
      • 引用 null
  // 动态初始化一维数组, 最多可以存储4个元素
  int[] a2 = new int[4];

什么时候使用动态初始化,什么时候使用静态初始化?

  • 无论是静态初始化还是静态初始化,最终在内存的分布都是一样的
  • 在创建数组的时候,如果已经知道数组中存储什么数据,当然采用静态初始化
  • 在创建数组的时候,无法预测到数组中存储什么数据,只是开辟空间,则使用动态初始化

深入一维数组:

  • 创建一个数组,使得该数组既可以存储Dog,又可以存储Cat
public class Test02 {
	public static void main(String[] args) {
		// 需求: 创建一个数组,这个数组既可以存储Dog,又可以存储Cat
		Animal[] as = new Animal[4];
		Dog d1 = new Dog();
		Dog d2 = new Dog();
		Cat c1 = new Cat();
		Cat c2 = new Cat();
		as[0] = d1; 
		as[1] = d2; 
		as[2] = c1; 
		as[3] = c2; 
		for(Animal a: as) {
			if(a instanceof Dog) {
				Dog d = (Dog)a;
				d.eat();
			}else if(a instanceof Cat) {
				Cat c = (Cat)a;
				c.move();
			}
		}
	}
}

class Animal{
	
}
class Dog extends Animal{
	public void eat() {
		System.out.println("Dog eat");
	}
}
class Cat extends Animal{
	public void move() {
		System.out.println("Cat move");
	}
}
  • 数组的参数传递
public class Test03 {
	public static void main(String[] args) {
		int[] arr = new int[4];
		arr[0] = 23;
		arr[1] = 223;
		arr[2] = 766;
		arr[3] = 43;
		m1(new int[] {1,2,4,23});
		m1(arr);
	}
	private static void m1(int[] a) {
		for (int item : a) {
			System.out.println(item);
		}
	}
}

main()方法中的参数列表String[] args参数详解
  • String[] args是专门用来接收命令行参数的

    // Test04.java
    public class Test04 {
    	public static void main(String[] args) {
    		System.out.println("args 元素的个数:" + args.length);
    	}
    }
    
    • 运行过程

      java Test04 abc dfd ggf
      

      输出结果为:3

      JVM 在调用Test04的 main方法之前,先将 “abc dfd ggf” 这个字符串以“空格”的方式分割,然后存储在 args 数组中, 等价为:

      JVM {
          String[] args = {"abc", "dfd", "ggf"};
          Test04.main(args);
      }
      

数组的拷贝

System类中有 arraycopy方法,可以用来实现数组的拷贝:

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);
// arraycopy 方法底层是由C++ 实现的

数组拷贝举例:

public class Test05 {
	public static void main(String[] args) {
//		System.arraycopy(src, srcPos, dest, destPos, length);
		int[] src = {1,2,3,4,5,6,7};
		int[] dest = {10, 20, 30, 40, 50, 60, 70, 80};
		System.arraycopy(src, 2, dest, 4, 2);
		for (int i = 0; i < dest.length; i++) {
			System.out.print (dest[i] + " ");
		}
	}
}

输出:

10 20 30 40 3 4 70 80

二维数组分析

二维数组是特殊的一维数组,二维数组的每一个元素都是一个一维数组

静态初始化二维数组
int[][] a = {
    {1,2,3}, 
    {4}, 
    {54,34,2}
}
  • 二维数组的每一个元素的长度可以不同

遍历二维数组

for(int i=0; i<a.length; i++){
    for(int j=0; j<a[i].length; j++){
        System.out.print(a[i][j] + " ");
    }
    System.out.println();
}
动态初始化二维数组
int[][] a = new int[3][4];

遍历二维数组

for(int i=0; i<a.length; i++){
    for(int j=0; j<a[i].length; j++){
        System.out.print(a[i][j] + " ");
    }
    System.out.println();
}

数组(Arrays)工具类

java.util.Arrays;
  • 排序

    import java.util.Arrays;
    
    public class Test07 {
    	public static void main(String[] args) {
    		int[] a = {1,2,3,4,21,4,1,5,2,63,25,63,23,52};
    		System.out.println(a);
    		Arrays.sort(a);
    		for(int i=0; i< a.length; i++) {
    			System.out.print(a[i] + " ");
    		}
    	}
    }
    
    
  • 二分查找

    import java.util.Arrays;
    
    public class Test08 {
    	public static void main(String[] args) {
    		//int[] a = {1,2,3,4,21,4,1,5,2,63,25,63,23,52};
    		// 二分查找要求数组是已经排好序的
    		int[] a = {1, 1, 2, 2, 3, 4, 4, 5, 21, 23, 25, 52, 63, 63};
    		int index = Arrays.binarySearch(a, 63);
    		System.out.println(index);
    	}
    }
    
  • 填充数组

    public class Test09 {
    	//程序入口
    	public static void main(String[] args) {
    		int[] a = {1,4,3,2,5};
    		Arrays.fill(a, 3);
    		for(int i=0; i<a.length; i++) {
    			System.out.print(a[i] + " ");
    		}
    	}
    }
    // 输出:3 3 3 3 3 
    

接收用户键盘输入

java.utils.Scanner;
System.in; // java中的标准输入流

举例

import java.util.Scanner;

public class Test06 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String msg = s.next();
		System.out.println("你输入的是:" + msg);
	}
}


以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tailor_long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值