JavaSE:数组

一维数组

数组(Array): 是多个相同类型数据按照一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

数组的常见概念:

  • 数组名
  • 下标(或索引)
  • 元素
  • 数组的长度:元素的个数

数组的特点:

  • 数组是有序排列的。
  • 数组本身是引用数据类型的变量,而数组中的元素可以是任何数据类型
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
  • 数组的长度一旦确定,就不能修改。

一维数组的使用:

  1. 一维数组的声明和初始化
  2. 如何调用数组的指定位置的元素
  3. 如何获取数组的长度
  4. 如何遍历数组
  5. 数组元素的默认初始值

数组的声明和初始化:

public class ArrayTest{
    
    public static void main(String[] args){
        
        //①一维数组的声明和初始化
        int[] ids;//声明
        //静态初始化:数组的初始化和数组元素的赋值操作同时进行
        ids = new int[]{1001,1002,1003,1004};
        //动态初始化:数组的初始化和数组元素的赋值操作分开操作
        String[] names = new String[3];
        
        //总结:数组一旦初始化完成,其长度就确定了
        //数组元素的调用:
        names[0] = "张三";
		names[1] = "李四";
		names[2] = "王五";
        
        
        //数组的长度:
        //属性:length
        System.out.println(ids.length);//4
        System.out.println(names.length);//3
        
        //获取数组中的单个元素
        System.out.println(names[0]);
        //遍历数组中的所有元素
        for(int i = 0;i< namses.length;i++){
            System.out.println(names.[i]);
        }
    }
}

数据的默认初始化值

数组元素的默认初始化值:

  • 数组元素是整形:0
  • 数组元素的浮点型:0.0
  • 数组元素是char性:0 或者’\u0000’ ; 并非是 ‘0’
  • 数组元素是boolean性:false
  • 数组元素是引用数据类型:null
public class ArrayTest {
	public static void main(String[] args) {
		//int型数组默认初始化值
        int[] arr = new int[4];
        for(int i = 0;i<arr.length;i++){
            System.out.println(arr[i]);//0000
        }

        System.out.println("--------------------------");
    	//double型数组默认初始化值
         double[] arr1 = new double[4];
        for(int i = 0;i<arr.length;i++){
            System.out.println(arr1[i]);
        }


         System.out.println("--------------------------");
    	//char型数组默认初始化值
         char[] arr2 = new char[4];
        for(int i = 0;i<arr2.length;i++){
            System.out.println("**" + arr2[i] + "**");
        }
    
    	System.out.println("--------------------------");
    	//boolean型数组默认初始化值
         boolean[] arr3 = new boolean[4];
        for(int i = 0;i<arr3.length;i++){
            System.out.println(arr3[i]);
        }
        
        System.out.println("--------------------------");
    	//引用数据类型数组默认初始化值
         String[] arr4 = new String[4];
        for(int i = 0;i<arr3.length;i++){
            System.out.println(arr4[i]);//null
        }
	}
}

多维数组

二维数组

Java语言中提供了支持多维数组的语法

对于二位数组的理解,外面可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。

二维数组的使用:

  • 二维数组的声明和初始化
  • 如何调用数组的指定位置的元素
  • 如何获取数组的长度
  • 如何遍历数组
  • 数组元素的默认初始值
@Test
	public void arrayTest2() {
		//1.初始化
        int[] arr = new int[]{1,2,3};//一维数组
        //二维数组
        //静态初始化
        int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        //动态初始化
        String[][] arr2 = new String[3][2];//数组中包含3个元素,每个元素中又包含2个元素。
        
        //2.如何调用数组的指定位置的元素
        System.out.println(arr1[0][1]);//2
        System.out.println(arr2[1][1]);//null
        
        //3.获取数组的长度
        System.out.println(arr2.length);//3
        System.out.println(arr2[1].length);//2
        
        
        //4,如何遍历二维数组
        //几维数组就使用几层 for循环
        for(int i = 0;i < arr1.length;i++){
            
            for(int j = 0;j < arr1[i].length;j++){
                System.out.print(arr1[i][j] + "  ");                
            }
            System.out.println();
        }
	}

二维数组元素默认初始化值:

规定:二维数组分为外层数组的元素,内层数组的元素

  • 针对于初始化方式一:比如:arr

    • 外层元素的初始化值为:地址值

    • 内层元素的初始化值为:与一位数组初始化情况相同

  • 针对于初始化方式二:如 arr3

    • 外层元素的初始化值为:null
    • 内层元素的初始化值为:不能调用,否则报错
@Test
	public void arrayTest3() {
		 int[][] arr = new int[4][3];
         System.out.println(arr[0]);//地址值
         System.out.println(arr[0][0]);//0
        
        
         float[][] arr1 = new float[4][3];
         System.out.println(arr1[0]);//地址值
         System.out.println(arr1[0][0]);//0.0
        
        
         String[][] arr2 = new String[4][3];
         System.out.println(arr2[0]);//地址值
         System.out.println(arr2[0][0]);//null
        
        
         double[][] arr3 = new double[4][];
         System.out.println(arr3[1]);//null
         System.out.println(arr3[1][0]);//报错
	}

数组中涉及到的常用算法

常用:

  1. 数组元素的赋值(杨辉三角、回形数等)
  2. 求数值型数组中元素的最大值、最小值、平均数、总和等
  3. 数组的赋值、反转、查询(线性查找、二分法查找
  4. 数组元素的排序算法

查找

线性查找:

实现思路:通过遍历的方式,一个一个的数据进行比较、查找。

适用性:具有普遍适用性

二分法查找:

实现思路:每次比较中间值,折半的方式检索。

适用性:前提:所要查找的数组必须有序。

排序

排序:假设含有n个记录的序列为{R1,R2,……,Rn},其相应的关键字序列为{K1,K2,……,Kn}。将这些记录重新排序为{Ri1,Ri2,……,Rin},使得相应的关键字值满足条件Ki1<=Ki2<=……<=Kin,这样的一种操作称为排序。

通常来说,排序的目的的快速查找。

衡量排序算法的优劣:

  1. 时间复杂度:分许关键字的比较次数和记录的移动次数(高效率)
  2. 空间复杂度:分析排序算法中需要多少辅助内存(低存储)
  3. 稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。

排序算法分类:内部排序和外部排序

  • 内部排序:整个排序过程不需要借助外部存储器(如磁盘等),所有排序操作都在内存中完成。
  • 外部排序:参与排序的数据非常多,数据量非常大,计算机无法把真个排序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认位外排序是由多次内部排序组成。

十大内部排序算法

  • 选择排序
    • 直接选择排序
    • 堆排序
  • 交换排序
    • 冒泡排序
    • 快速排序(常用、快)
  • 插入排序
    • 直接插入排序
    • 折半插入排序
    • Shell排序
  • 归并排序
  • 桶式排序
  • 基数排序

算法的5大特征

  • 输入:由0个或者多个输入数据,这些输入必须由清除的描述和定义
  • 输出:至少有1个活多个输出结果,不可以没有输出结果
  • 有穷性(有线性):算法在有限的步骤之后会自动结束而不会无线循环,并且没有每一个步骤都可以在可接受的时间内完成。
  • 确定性(明确性):算法中的每一步都有明确的含义,不会出现二义性。
  • 可行性(有效性):算法的每一步都是清楚且可行的,能上用户用纸笔计算而求出的答案。

说明:满足确定性的算法也称为:确定性算法。现在人们也关注更广泛的概念。比如:考虑各种非确定性的算法,如并行算法、概率算法等。另外,人们也关注并不要求终止的计算描述,这种描述有时被称为过程。

冒泡排序:

@Test
	public void arrayTest4() {
		 int[] arr = new int[]{43,32,76,-42,0,64,33,-21,32,99};
	        //冒泡排序
	        for(int i = 0;i < arr.length;i++){
	            for(int j = 1;j < arr.length - i;j++){
	                
	                if(arr[j - 1] > arr[j]){
	                    int temp = arr[j];
	                    arr[j] = arr[j - 1];
	                    arr[j - 1] = temp;
	                }
	            }
	        }
	        
	        for(int i = 0;i < arr.length;i++){
	            System.out.print(arr[i] + " ");
	        }
	}	

Arrays工具类

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。

在这里入图片描述

@Test
	public void arraysTest() {
		
        int[] arr1 = new int[]{1,2,3,4};
        int[] arr2 = new int[]{1,4,2,3};

		//1.boolean equals(int[] a,int[] b) //判断两个数组是否相等。
        boolean isEquals = Arrays.equals(arr1,arr2);
        System.out.println(isEquals);//false
        
        //2.String toString(int[] a); //输出数组信息
        String str = Arrays.toString(arr1);
        System.out.println(str);//[1, 2, 3, 4]
        
        //3.void fill(int[] a,int val);   //将指定值填充到数组当中
        Arrays.fill(arr1, 999);
        System.out.println(Arrays.toString(arr1));//[999, 999, 999, 999]
        
        //4.void sort(int[] a) //对数组进行排序
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4]
        
        //5.int binarySearch(int[] a,int key); //对排序后的数组进行二分法查找
        int index = Arrays.binarySearch(arr2, 2);
        System.out.println(index);//1
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值