首页 > 其他分享 >数组

数组

时间:2024-01-05 15:57:38浏览次数:39  
标签:arr int System length 数组 out

数组的概述

说明: untitle.png

数组的特点:数组是有序排列的。

1、数组属于引用数据类型的变量。数组的元素既可以是基本数据类型也可以是引用数据类型。

2、创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。

3、数组的长度一旦确定,就不能修改。

数组的分类

按照维度:一维数组、二维数组、三维数组、…

按照元素的数据类型:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)

一维数组的使用

一维数组的声明和初始化

说明: untitle.png

说明: untitle.png

数组一旦初始化完成,其长度就确定了。

数组元素的引用

数组的角标从0开始,到数组的长度减一结束。

使用属性length可以获取数组的长度。

说明: untitle.png

增强遍历一维数组(foreach)

说明: untitle.png

int[] a = new int[]{1,2,3,4}; 
for(int e : a){ 
 System.out.println(e);
}
//--------------------------------------
String[] names = {"beibei", "jingjing"};    
for (String name : names) {    
 System.out.println(name);
}

数组元素的默认初始化值

说明: untitle.png

内存解析

内存的简化结构

说明: untitle.png

一维数组的内存解析

说明: untitle.png

多维数组的使用

对于二维数组的理解,我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。

二维数组的声明和初始化

说明: untitle.png

说明: untitle.png

二维数组的引用

int[][] arr = new int[][]{{1,2,3,},{4,5},{6,7,8}};
System.out.println(arr[0][1]); 
输出
2

二维数组的长度

int[][] arr = new int[][]{{1,2,3,},{4,5},{6,7,8}}; 
System.out.println(arr.length); 
输出
3
System.out.println(arr[1].length); 
输出
2

遍历二维数组

使用嵌套循环

int[][] arr = new int[][]{{1,2,3,},{4,5},{6,7,8}}; 
for(int i = 0;i < arr.length;i++){ 
  for(int j = 0;j < arr[i].length;j++){ 
    System.out.print(arr[i][j]);    
  }   
} 输出
12345678

二位数组的元素默认初始值

int[][] arr = new int[4][3];
System.out.println(arr[0]); 
System.out.println(arr[0][1]);
输出
[I@15db9742
//外层数组默认值为地址值
0
//内层数组默认值为对应类型一维默认值

二维数组的内存解析

说明: untitle.png

数组中涉及到的常见算法

说明: untitle.png

二分法查找

要求:要查找的数组必须有序

设置首位索引的方法,不断地取中间值。

/** 
* 二分查找法
*/
public static int binSearch(int[] a,int b){   
  int low = 0;   
  int high = a.length - 1;  
  while (low <= high){   
    int mid = (low + high)/2;   
    if (a[mid] < b){        
      low = mid + 1;      
    }else if(a[mid] == b){       
      return mid;       
    }else {   
      high = mid - 1;  
    }   
  }  
  return -1;
}

常用方法

Arrays工具类的使用

说明: untitle.png

System.arraycopy

//src:     原数组
//srcPos: 原数组起始位置(从这个位置开始复制)
//dest:   目标数组
//destPos:目标数组粘贴的起始位置
//length: 复制的个数
public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length);

数组常见异常

说明: untitle.png

标签:arr,int,System,length,数组,out
From: https://www.cnblogs.com/yhgh/p/17947425

相关文章

  • MySQL 8.0的SQL查询JSON返回的数据类型为字符串而非数组
    在MySQL8.0中,SQL查询JSON返回的数据类型确实是字符串,而不是数组。这是因为MySQL将JSON数据存储为字符串,并提供了一些函数和操作符来处理JSON数据。但是,你可以使用内置的JSON函数来处理返回的JSON字符串。例如,你可以使用JSON_EXTRACT函数来提取JSON字符串......
  • 指针数组与数组指针的区别及相关知识
    区别:指针数组:定义int*p[n]可称为指针的数组,是数组,数组里的元素都是指针。也就是说数组存储的是指针,数组占多少字节由数组本身决定。指针数组+1不同类型的变化如下//eg:用指针parr指向一个一维数组intmain(){ int*parr[5]={0,1,2,3,4}; printf("%x\n",parr);//数组名代......
  • 2024-01-03:用go语言,给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time, 分别表示
    2024-01-03:用go语言,给你两个长度为n下标从0开始的整数数组cost和time,分别表示给n堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠,一位需要付费的油漆匠,刷第i堵墙需要花费time[i]单位的时间,开销为cost[i]单位的钱。一位免费的油漆匠,刷任意一堵墙的时间为1......
  • 稀疏数组
    问题介绍需求:编写五子棋游戏中,有存盘退出和续上盘的功能。 分析问题:因为二维数组的很多值是默认值0,因此记录了很多没有意义的数据。解决:稀疏数组概念当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有......
  • 【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 dequ
    文章目录一、stack堆栈容器简介1、stack堆栈容器引入2、stack堆栈容器特点3、stack堆栈容器与deque双端数组容器对比二、代码示例-stack堆栈容器简单示例1、代码示例2、执行结果一、stack堆栈容器简介1、stack堆栈容器引入C++语言中的STL标准模板库中的stac......
  • 数组指针的用法
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//参数是数组形式voidprint1(intarr[3][5],intx,inty)//用数组形式接收,再接收传来的参数{ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]);......
  • 数组指针
    数组指针是指针 用来存放数组的地址#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //eg: //int*P=NULL;//p是整形指针-指向整型的指针-可以存放整型的地址 //char*pc=NULL;//pc是字符指针-指向字符的指针-可以存放字符的地址 //数组指针-指......
  • 指针数组
    指针数组是数组是用来存放指针的eg:指针数组用法#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //int*parr[4];//存放整型指针的数组--指针数组 //char*pch[5];//存放字符指针的数组--指针数组 intarr1[5]={1,2,3,4,5}; intarr2[5]={2,3,4,5,6......
  • 在 PHP 数组中的两个字符串之间切换
    在PHP中,你可以使用array_flip()函数和条件语句来在数组中的两个字符串之间进行切换。以下是一个示例://创建一个数组,包含两个字符串的映射关系$mapping=array('string1'=>'value1','string2'=>'value2');//定义当前需要切换的字符串$currentString='stri......
  • 代码随想录 小结01 数组
    数组篇一共有五个题目第一题二分查找值得注意的是,要自己想好区间的边界到底是写左闭右开还是左闭右闭根据边界不同while的条件和左右指针的移动会有差别目前我的习惯是写左闭右开还是固定一下习惯比较好第二题是实现数组类的erase()使用快慢指针可以做到在数组原地进......