首页 > 其他分享 >数组

数组

时间:2023-08-19 18:34:06浏览次数:26  
标签:arr 数组 int System arr1 println

数组

我们可以使用数组来保存同一个数据类型的多个数据

数组的特点

1. 数组的长度一旦确定就不能改变
	1. 一个数组中元素的数据类型都是一样的

数组的初始化

动态初始化

格式

数据类型[] 数组名 = new 数据类型[长度];

例如:

int[] array = new int[10];//动态初始化一个长度为10的数组,数组元素为int类型

静态初始化

格式

数据类型[] 数组名 = new 数据类型[]{元素值1,元素值2,元素值3,...};

数据类型[] 数组名 = {元素值1,元素值2,元素值3,...};//省略格式

例如:

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

总结

静态初始化和动态初始化都可以实现对数组的初始化,那么我们在需要创建数组的时候应该如何选择呢?

如果数组元素都确定好了,并且个数有限的情况下我们可以使用静态初始化,因为更方便。如果只能确定数组的长度,数组的元素值需要后面再赋值的话可以使用动态初始化。

数组元素的表示

格式

数组名[索引值]

例如:

int[] arr = {1,2,3,4};
System.out.println(arr[0]);//输出数组arr的第一个元素
arr[2] = 5;//把数组arr的第3个元素值修改为5

注意

  • 索引值就是一个int数字,代表数组当中元素的编号。
  • 索引值从0开始,一直到“数组的长度-1”为止。例如长度为5的数组他的索引范围为0到4。

数组的内存数据结构

int[] arr1 = new int[4];
        arr1[0] = 1;
        arr1[1] = 2;
        int[] arr2 = arr1;
        arr2[2] = 3;
        arr2[3] = 4;
        System.out.println(arr1);//[I@7c30a502
        System.out.println(arr2);//[I@7c30a502
        System.out.println(Arrays.toString(arr1));//[1, 2, 3, 4]
        System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4]

如果想要弄明白上面代码的输出结果就需要知道一个数组在内存中是如何存储的。

实际上,数组的实体保存在堆中,数组名实际保存的是数组实体的地址值

数组

数组_System

长度

在java中我们可以非常方便的获取到数组的长度,格式如下:

数组名.length

例如:

int[] arr = {1,2,3,4};
	  //输出数组长度
	  System.out.println(arr.length);

数组遍历

我们在操作数组的时候很多时候需要对数组的每个元素挨个操作一遍,这种情况下我们就可以对数组进行遍历操作。

int[] arr={1,2,3,4,5,7};
//遍历输出数组元素
for(int i=0;i<arr.length;i++){
	System.out.println(arr[i]);
}

常见问题

  1. 数组越界:数组定义的长度n,索引可使用的最大值为n-1。索引值从0开始

二维数组

二维数组是一维数组的扩展(一维数组嵌套),实质是一维数组中存放其他一维数组的地址,然后根据地址进行访问。

在找到内层的一维数组的地址后,其内部数据的操作和正常的一维数组相同。

初始化

格式示例:

public static void main(String[] args) {
      int[][] arr1 = new int[3][2];//正常定义二维数组
      int[][] arr2 = new int[4][];// 由于二维数组本质是一维数组嵌套的性质,在初始化的时候必须指定外层数组的个数
      //int[][] arr2 = new int[][x];// 编译不通过
      int[][] arr3 = new int[][]{{1,3},{2},{5,6,7}};// 相当于 int[][] arr1 = new int[3][3]; 并赋值
}

二维数组的内存结构

数组_System_02

二维数组的长度

由于是嵌套一维数组,外层长度指的是外层一维数组的长度,可以通过二维数组变量名称.length 得到。内存数组类似。

int[][] arr1 = new int[][]{{1,3},{2},{5,6,7}};
System.out.println(arr1.length);// 3 二维数组外层长度
System.out.println(arr1[0].length);// 2 二维数组内层第一个数组的长度
System.out.println(arr1[1].length);// 1 二维数组内层第二个数组的长度
System.out.println(arr1[2].length);// 3 二维数组内层第三个数组的长度

二维数组遍历

int[][] arr = new int[3][2];
        //循环赋值
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length ; j++) {
                arr[i][j] = 2 * (j+1) - 1;
            }
        }
        //打印二维数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(Arrays.toString(arr[i]));
        }

相关算法

  • 二分查找(Binary Search)
  • 冒泡排序

Arrays工具类

int[] arr = {21, 513, 34, 6, 32, 632, 44, 66, 13};
int[] arr1 = {21,42,354,345,12,2345,56};
//sortOne(arr);
Arrays.sort(arr);//从小到到排序
boolean equals = Arrays.equals(arr, arr1);//判断数组内容是否相等
int binarySearch = Arrays.binarySearch(arr, 32);//对有序数组进行二分查找,并返回数组下标,-1表示未找到。
System.err.println(binarySearch);
System.err.println(equals);//false
System.out.println(Arrays.toString(arr));//[6, 13, 21, 32, 34, 44, 66, 513, 632]

面向过程实现

水仙花数

所谓的水仙花数是指:一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。例如153,370,371,407等都是水仙花数,就拿153来说,153 = 111 + 555 + 333.

代码实现:

//面向过程实战:寻找水仙花数
    public static void main(String[] args) {
        
        seekNum();
    }

    private static void seekNum() {
        int j = 0;
        int k = 0;
        int l = 0;
        int[] nums;
        int sum = 0;
        for (int i = 100; i < 1000; i++) {
            j = i / 100;
            k = i / 10 % 10;
            l = i % 10;
            if (i == (j * j * j + k * k * k + l * l * l)) {
                System.out.println(i + " 是一个水仙花数");
            }
        }
    }

九九乘法表

代码实现:

public static void main(String[] args) {
        for (int i = 1; i <= 9 ; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.printf(" %d x %d = %2d ",i,j,i*j);
            }
            System.out.println();
        }
    }

斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci)1202年以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:

1、1、2、3、5、8、13、21、34、55、89……

这个数列从第 3 项开始,每一项都等于前两项之和。

在数学上,斐波那契数列以如下被以递推的方法定义:

F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) n属于自然数

代码实现:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //int num = seekNum01(sc.nextInt());//递归函数
        int num2 = seekNum02(sc.nextInt());//for循环
        System.out.println(num2);
    }

    private static int seekNum02(int i) {
        int tmp = 0;
        int a = 1;
        int b = 1;
        for (int j = 1; j <= i-2; j++) {
            tmp = a + b;
            a = b;
            b = tmp;
        }
        return tmp;
    }

    private static int seekNum01(int i) {

        if(i == 1 || i ==2){
            return 1;
        }else {
            return seekNum01(i -1) +seekNum01(i - 2);
        }

    }

标签:arr,数组,int,System,arr1,println
From: https://blog.51cto.com/u_16230183/7150983

相关文章

  • 「AWOI Round 2 C」数组操作?数组操作!
    「AWOIRound2C」数组操作?数组操作!洛谷题目描述给定两个长度为\(n\)的数组\(a,b\),将它们合并得到一个长度为\(2\timesn\)的数组\(c\)。设\(a\)数组第\(i\)个元素合并后位于\(c\)数组第\(lb_i\)个位置,\(b\)数组第\(i\)个元素合并后位于\(c\)数组第\(......
  • 线段树与树状数组
    $$\texttt{线段树}$$OI-wikiLink线段树是一种用于维护区间信息的数据结构,可以在\(O(\logn)\)的复杂度下求出一个大小为\(n\)的数组的区间信息(如区间和、区间最大值等),也可以在同样时间复杂度下实现单点修改和区间修改等操作。基本结构:......
  • 代码随想录算法训练营第六天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数
     哈希表部分:哈希表,简单来说就是k-v形式查询的结构,用来快速判断一个元素是否出现集合里,如hashmap核心是哈希函数,k存哈希函数的值,找的时候找查询项的哈希函数值就行,返回v 出现哈希碰撞的时候,查找的流程怎么走呢?(*存疑,之后查一下) 类型:数组+集合set(set、multiset、unordered......
  • JavaScript中的析构对象,析构数组与展开运算符
    前言这些是JavaScript中重要的编程思想,这些析构对象,析构函数与展开运算符很重要这块内容不怎么难,纯属一些语法,但是在所谓的函数式编程,以及React中却是广泛使用的逆向思维,之前是怎么构造,而现在让你如何展开,获取里面的内容!!逆向思维,之前是怎么构造,而现在让你如何展开,获取里面的内......
  • 常用数组方法
    1.push()末尾添加数据2.pop()末尾出删除数据3.unshift()头部添加数据4.shift()头部删除数据5.reverse()翻转数组6.sort()排序7.splice() 截取数组8.concat()合并数组9.join()数组转字符串10.slice()截取数组的一部分数据11.indexOf从左检查数组中有没有这个数值12.lastInde......
  • C++快速入门 第十讲:复杂的数据类型——指针和数组
    计算机是把数组以一组连续的内存块保存的。数组的第一个元素的地址为该数组的基地址。实例1:数组元素地址打印1#include<iostream>23usingnamespacestd;45intmain()6{7constunsignedshortITEMS=5;8intintArray[ITEMS]={1,2,3,4,5}......
  • js筛选数组排除多个多个不符合项
    constarr=[{label:'2',value:'2'},{label:'1',value:'1'},{label:'3',value:'3'}]//把value=1和value=2的数据筛掉letnewArr=arr.filter(opt=>......
  • 笔记整理--C语言--数组指针和指针数组的区别 - hongcha_717 - 博客园——转载
    【转载】:原文http://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html数组指针和指针数组的区别数组指针(也称行指针)定义int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个......
  • Python删除数组中的某个元素
    https://www.python100.com/html/639RN4V5T3ZL.htmlpython删除数组中的五种方法,包括remove()、pop()、del关键字、列表解析和numpy库的delete()函数。每种方法都有其特点,可以根据具体情况选择。 方法二:pop()pop()函数可以删除数组中指定索引的元素。它的基本用法是:array.pop(......
  • LeetCode 718.最长重复子数组
    1.题目:给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例1:输入:nums1=[1,2,3,2,1],nums2=[3,2,1,4,7]输出:3解释:长度最长的公共子数组是[3,2,1]。示例2:输入:nums1=[0,0,0,0,0],nums2=[0,0,0,0,0]输出:52.代码:classSo......