首页 > 编程语言 >JAVA数组

JAVA数组

时间:2024-07-22 15:32:09浏览次数:12  
标签:arr JAVA int array2 System 数组 out

数组概述

数组是相同类型数据的有序集合,按一定的先后次序组合而成。

每一个数据称为一个数组元素,每个数组元素可以通过一个下标来访问。

数组声明创建

定义数组

变量类型 变量名字 = 变量的值

int[] nums;//首选
int nums[];//次选
//未赋值默认为空 即 int[] array = null;

初始化数组

nums = new int[10]

定义并初始化数组

int[] a = {1,2,3,4,5};`
int[] array = new int[10];
int[] arr = new int[]{3,5,1,7};

赋值

int[0] = 0;
//省略1~8
int[9] = 9;

获取数组长度

array.length

内存分析(堆和栈)

堆:存放new的对象和数组,可以被所有的线程共享,不会存放别的对象引用。

栈:存放基本变量类型(包含具体数值)、引用对象的变量(堆的具体地址)

三种初始化

静态初始化:创建+赋值

int[] a = {1,2,3,4,5};

动态初始化:包含默认初始化

int[] b = new int[10];//默认值为0

默认初始化(默认赋值)

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

运用

//使用循环赋值
public static void main(String[] args) {
    int[] arr = new int[10];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = i;
        System.out.println(arr[i]);
    }
}

基本特点

  1. 长度确定。定义完不可改变。
  2. 类型固定。不存在混合类型数组。
  3. 元素任意。数组中的元素可以是基本类型,可以是引用类型。
  4. 数组也是对象。数组保存在堆中,数组元素相当于对象的成员变量。
  5. 不可越界。数组[0, n],越界报错"ArrayIndexOutOfBoundsException:数组下标越界异常!"

数组使用

For循环

int[] arrays = {1, 2, 3, 4};
for(int i=0; i<arrays.length;i++){
    System.out.println(arrays[i]); 
}

For-Each循环

//idea输入array.for->
//增强型for循环:只能访问不可改变,没有下标
int[] arrays = {1, 2, 3, 4};
for(int array : arrays){
    System.out.println(arrays); 
}

数组作为方法入参及返回值

public static void main(String[] args) {
        int[] arrays = {1, 2, 3, 4};
        printArray(arrays);
        int[] result = reverse(arrays);
        printArray(result);
    }
    //打印数组元素
    public static void printArray(int[] arrays){
        System.out.println("数组元素为:"+Arrays.toString(arrays));
    }
    //反转数组
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];
        //反转的操作
        for (int i = 0, j=result.length-1; i < arrays.length; i++,j -- ) {
            result[j] = arrays[i];
        }
        return result;
    }

多维数组

二维数组

int[][] arr = {{1, 2},{3, 4}};
int[][] arr = new int[10][10]

三维数组

//必须输入数据成为一个完整的数组,否则会报错
int[][][] arr1 = {{{0, 1},{2, 3}},{{4, 5}, {6, 7}}};
int[][][] arr2 = new int[10][10][5];

示例:二维遍历输出

int[][] array ={{1, 2}, {2, 3}, {3, 4}, {4, 5}};
for (int i = 0; i < array.length ; i++) {
	for (int j = 0; j <array[i].length ; j++) {
		System.out.println(array[i][j]);
	}
}

拓展

Arrays类

使用:Array.方法名(数组名)//Array.sort(arr)

常见功能:

  1. 给数组赋值:通过fill方法。

    arr 数组名,[min, max) 区间,x是填充值

    Array.fill(arr, x); Array.fill(arr, min, max, x);

  2. 对数组排序:通过sort方法,按升序。

    Array.sort(arr)

  3. 比较数组:通过equals方法比较数组中元素值是否相等。

    Array.equals(arr1, arr2)

  4. 查找数组元素:通过 binarySearch方法能对排序好的数组进行二分查找法操作。

    arr 数组名,[min, max) 区间,x是搜索值

    Array.binarySearch(arr, x);Array.binarySearch(arr, min, max, x)

  5. 打印数组:通过toString方法,以字符串的形式打印。

    System.out.println(Array.toString(arr));

冒泡排序

两层循环,外层冒泡轮数,内层依次比较。

时间复杂度O(n2)

public static void main(String[] args) {
        int[] ints = {1,24,53,42,5};
        int[] sort = sort(ints);
        System.out.println(Arrays.toString(sort));
}
//增加了flag优化
public static int[] sort(int[] array){
    //临时变量
    int temp = 0;
    //外层循环,判断我们这个要走多少次;
    for (int i = 0; i < array.length-1; i++) {
        boolean flag=false;//通过fLag标识位减少没有意义的比较
        //内层循环,比价判断两个数,如果第一个数,比第二个数大,则交换位置
        for (int j = 0; j < array. length-1-i ; j++) {
            if (array[j+1]<array[j]){
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
                flag = true;
            }
        }
        if (flag == false){
        	break;
        }
    }
	return array;
}

稀疏数组

当数组中存在大量的相同的数据,记录下不同的数据的信息,压缩数组。

定义:array[count+1] [3]

array[0] 存放 [总行] [总列] [个数]

从下标为一开始记录数据:

array[x] [行] [列] [数据]

public static void main(String[] args) {
    //示例
    //1. 创建一个二维数组 11* 11 0:没有棋子 1:黑棋 2:白棋
    int[][] array1 = new int[11][11];
    array1[1][2] = 1;
    array1[2][3] = 2;

    //输出原始的数组
    System.out.println("输出原始的数组");
    for (int[] ints : array1) {
        for (int anInt : ints) {
            System.out.print(anInt+"\t");
        }
        System.out.println();
    }

    //转换为稀疏数组保存
    //获取有效值的个数
    int sum = 0;
    for (int i = 0; i < 11; i++) {
        for (int j = 0; j < 11; j++) {
            if (array1[i][j] != 0){
                sum++;
            }
        }
    }
    System.out.println("有效值的个数:"+sum);

    //2.创建一个稀疏数组的数组
    int[][] array2 = new int[sum+1][3];

    array2[0][0] = 11;
    array2[0][1] = 11;
    array2[0][2] = sum;

    //遍历二维数组,将非零的值,存放稀疏数组中
    int count=0;
    for (int i = 0; i < array1.length ; i++) {
        for (int j = 0; j < array1[i].length; j++) {
            if (array1[i][j] != 0){
                count++;
                array2[count][0] = i;
                array2[count][1] = j;
                array2[count][2] = array1[i][j];
            }
        }
    }

    //输出稀疏数组
    System.out.println("稀疏数组");

    for (int i = 0; i < array2.length; i++) {
        System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
    }

    System.out.println("还原");
    //1.读取稀疏数组
    int[][] array3 = new int[array2[0][0]][array2[0][1]];

    //2.给其中的元素还原它的值
    for (int i = 1; i < array2.length; i++) {
        array3[array2[i][0]][array2[i][1]] = array2[i][2];
    }

    //3.打印
    System.out.println("输出还原的数组");
    for (int[] ints : array3) {
        for (int anInt : ints) {
            System.out.print(anInt+"\t");
        }
        System.out.println();
    }
}

标签:arr,JAVA,int,array2,System,数组,out
From: https://www.cnblogs.com/CLB-BB/p/18316073

相关文章

  • 编辑距离与滚动数组优化 - 二维动态规划模板
    题目:编辑距离。思路显然,定义\(f[i][j]\)表示字符串\(a\)中前\(i\)个字符到字符串\(b\)中前\(j\)个字符的编辑距离。那么对于\(a_i=b_j\)时,我们对当前位无需进行任何编辑操作,则\(f[i][j]=f[i-1][j-1]\)。如果\(a_i\neb_j\),那么我们就要对当前位进行编辑:......
  • UOS系统部署KingbaseES V8R6 java故障“InvocationTargetException”
    案例说明:在UOS系统下部署KingbaseESV8R6数据库时,出现Java错误,部署失败。系统版本:kingbase@srv01:~$cat/etc/os-releasePRETTY_NAME="UnionTechOSServer20"NAME="UnionTechOSServer20"VERSION_ID="20"VERSION="20"ID=UOSHOME_URL="h......
  • Java语言程序设计基础篇_编程练习题**15.17 (几何问题:寻找边界矩形)
    **15.17(几何问題:寻找边界矩形)请编写一个程序,让用户可以在一个二维面板上动态地增加和移除点,如图15-29a所示。当点加入和移除的时候,一个最小的边界矩形更新显示。假设每个点的半径是10像素解题思路:这道题可以从编程练习题15.15修改新建一个面板Pane(),方法外部新建一个......
  • 代码随想录day6 | 242 有效字母异位词 349 两个数组交际 202 快乐数 1 两数之和
    hash表遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法242判断字母异位词关于字符串的遍历问题//什么情况下遍历的是rune[]int36类型,什么情况下遍历的是char字节类型?s:="Hello,世界"fori,r:=ranges{ fmt.Printf("Index:%d,Rune:%c,......
  • 【GeoJSON】Java 使用 GeoTools 将 SHP 文件转成 GeoJSON 文件
    文章目录引言Mavensettings.xml配置配置项目中的pom.xml引入GeoToolsJar包使用引言在使用GeoTools时,我们没办法直接使用Maven中央库的GeoTools,所以就需要我们配置一下关于GeoTools自己的镜像,所以我们才需要以下这几个步骤:1、检查一下自己本机maven的......
  • 科普文:TransmittableThreadLocal通过javaAgent实现线程传递并支持ForkJoin
    概叙TransmittableThreadLocal的介绍,直接看官网:https://github.com/alibaba/transmittable-thread-local目前使用中的稳定发布版本v2.x在 分支2.x上。帮助文档:https://github.com/alibaba/transmittable-thread-local#-%E5%8A%9F%E8%83%BD这篇文章主要介绍了Transmitta......
  • Java计算机毕业设计旅行分享平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化时代,旅游行业正经历着前所未有的变革。随着人们生活水平的提高和休闲方式的多样化,旅行已成为现代人追求生活品质、拓宽视野的重要方式之一。......
  • Java计算机毕业设计旅游网站的设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的普及和人们生活水平的提高,旅游已成为现代人休闲娱乐的重要方式之一。然而,面对繁多的旅游信息、复杂的行程规划与预订流程,传统的旅游服务......
  • Java计算机毕业设计健美操社团活动信息管理系统设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今高校校园文化日益丰富的背景下,健美操社团作为促进学生身心健康、增强团队协作能力的重要平台,其活动组织与管理效率直接影响到社团的活力与影响......
  • Java计算机毕业设计健身场馆预约(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们对健康生活的日益重视,健身已成为现代都市人不可或缺的生活方式之一。然而,传统健身场馆在管理和服务上常面临诸多挑战,如会员管理混乱、场地资......