【Java】数组Array
Java基础复习之:数组
简介
数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理
一维数组
一维数组的声明与初始化
int[] ids; //声明
ids[] = new int[]{1,2,3,4} //初始化
静态初始化
声明和初始化可同时进行
int[] ids = new int[]{1,2,3,4}
动态初始化
数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5]; // length = 5
names[0] = "旅鸟";
names[1] = "Birdy";
...
names[4] = "James"; //最大下标为4
- 只能一个个赋值,多维数组也一样
- 数组的下标从0开始,最大为length-1
常见错误方式
int[] arr1 = new int[]; //没有声明数组长度或没有赋值
int[5] arr2 = new int[5]; //声明数组名时[]应该是空的
int[] arr3 = new int[3]{1,2,3}; //四不像,若是静态初始化就不用声明数组长度, 若是动态初始化就不能直接赋值
需要注意
- 静态初始化有长度,无数值;动态初始化有数值,无长度
- 一旦初始化完成数组长度就确定了
- 数组的下标从0开始,最大为length-1
一维数组元素的引用
通过角标方式调用
String[] names = new String[5]; // length = 5
names[0] = "王铭";
names[1] = "王赫";
names[2] = "张学良";
names[3] = "孙居龙";
names[4] = "王宏志";
数组的属性
数组的长度length
调用方式:数组名.length
System.out.println(names.length); //5
一维数组的遍历
普通方式
int[] arr = new int[]{1,2,3,4,5};
for (int i = 0; i < arr.length; i++){
System.out.print(i);
}
//结果:12345
foreach
在遍历数组时,使用foreach语句更简单。
语法:元素类型 局部变量: 数组名
int[] arr = new int[]{1,2,3,4,5};
for (int i: arr) {
System.out.print(i);
}
//结果:12345
Arrays工具类中toString静态方法遍历
public static String toString(int[] a)
,该方法有其他重载方法,用于其他数组类型
利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出
int[] arr = new int[]{1,2,3,4,5};
System.out.println(Arrays.toString(arr));
//结果:[1, 2, 3, 4, 5]
Lambda 表达式遍历(JDK 1.8)
Integer[] arr = new Integer[]{1,2,3,4,5}; //需要是包装类型
Arrays.asList(arr).forEach(item -> System.out.println(item));
//结果:123456
数组元素的默认初始化值
- 数组元素是整形:0
- 浮点型:0.0
- char:'\u0000',表现为空格,实际不是空格
- boolean:false
- 引用数据类型:null
内存解析
局部变量都放在栈中,new出来的空间都在堆中
二维数组
如何理解二维数组
数组属于引用数据类型,数组的元素也可以是引用数据类型
一个一维数组A的元素如果还是一个一维数组类型的,则此数组A称为二维数组。
二维数组的声明与初始化
静态初始化
数据类型 [ ][ ] 数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}
//也是正确的写法:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int arr5[][] = {{1,2,3},{4,5},{6,7,8}}; //类型推断,若声明和初始化分开则不能这样简写
动态初始化
数据类型[][] 变量名=new 数据类型[m][n];
m表示这个二维数组有多少个数组
n表示每一个一维数组的元素个数
/*
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是ar[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
*/
String[][] arr = new String[3][2];
数据类型[][] 变量名=new 数据类型[m][];
m表示这个二维数组有多少个数组
这一次没有直接给出一维数组的元素个数,可以动态的给出
int[][] arr=new int[3][];
arr[0] = new int[2];
arr[1]= new int[3];
arr[2]=new int[1];
如何调用二维数组元素
数组名[m][n]
:取一维数组中的元素数组名[m][]
:取一维数组
int arr1[][] = new int[][]{{1},{2,3},{4,5,6}};
System.out.println(arr1[0]); //[Ljava.lang.Integer;@1540e19d 地址
System.out.println(arr1[1][0]); //2
二维数组的遍历
普通for循环
int arr[][] = new int[][]{{1},{2,3},{4,5,6}};
//for循环遍历二维数组。
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
/*
结果:
1
23
456
*/
增强for循环
int arr[][] = new int[][]{{1},{2,3},{4,5,6}};
for (int x[]: arr) {
for (int a: x) {
System.out.print(a);
}
System.out.println();
}
/*
结果:
1
23
456
*/
Arrays工具类中toString静态方法遍历
int arr[][] = new int[][]{{1},{2,3},{4,5,6}};
for(int i = 0; i < arr.length; i++){//循环得到一维数组
System.out.println(Arrays.toString(arr[i]));//将一维数组转化为字符串输出
}
/*
[1]
[2, 3]
[4, 5, 6]
*/
Lambda 表达式遍历(JDK 1.8)
Integer arr[][] = new Integer[][]{{1},{2,3},{4,5,6}};
Arrays.asList(arr).forEach(item -> {
for (int i: item) {
System.out.print(i);
}
System.out.println();
});
/*
1
23
456
*/
二维数组元素的默认初始化值
二维数组分为外层数组元素,内层数组里的元素
- 外层元素的初始化值为:地址值
- 内层元素的初始化值为:取决于数据类型,与一维数组相同
//针对于初始化方式一:比如:int[][] arr = new int[4][3];
Integer arr[][] = new Integer[][]{{1},{2,3},{4,5,6}};
//外层元素:arr[0]:地址,arr[1]:地址
//内层元素:arr[0][0]:1,arr[1][1]:3
//针对于初始化方式二:
int[][] arr = new int[4][];
//外层元素的初始化值:null
//内层元素的初始化值:不能调用,否则报错。
二维数组内存解析
数组的优势与局限(待更新)
Arrays工具类
需要操作数组元素时,优先查看工具类中的方法,例如排序,二分法,判断是否相等啊,填充等常见功能在在工具类中都有,不需要自己写,位置在java.util.Arrays
多看API文档,没错滴
【Java】数组Array的更多相关文章
- Java-杂项:Java数组Array和集合List、Set、Map
ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...
- 如何正确的把 Java 数组 Array 转为列表 List
最近想把 java 数组转成 List,网上普遍的答案都是 Arrays.asList: String[] a = new String[] {"hello", "wor ...
- Java 反射 Array动态创建数组
Java 反射 Array动态创建数组 @author ixenos 注:java.lang.reflect.Array 是个反射工具包,全是静态方法,创建数组以多维数组为基准,一维数组只是特殊实现 ...
- JAVA中数组Array与List互转
List<String> list = new ArrayList<String>();String[] array = new String[10]; 1.数组转成Listl ...
- Java反射04 : 通过Array动态创建和访问Java数组
java.lang.reflect.Array类提供了通过静态方法来动态创建和访问Java数组的操作. 本文转载自:https://blog.csdn.net/hanchao5272/article/ ...
- Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别
ArrayList和Vector的区别ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...
- 数据结构和算法(Java版)快速学习(数组Array)
Java数组 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型. 用类封装数组实现数据结构 数据结构必须具有以下基本功能: ①.如何插入一条新的数据项 ②.如何寻找某一特定 ...
- Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如numbers[100 ...
- Java 数组基础
数组 数组(Array):相同类型数据的集合. 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数]; 比如: int[] a = new int ...
随机推荐
- 鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案 | 百篇博客分析OpenHarmony源码 | v30.02
百篇博客系列篇.本篇为: v30.xx 鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当 ...
- P7599-[APIO2021]雨林跳跃【二分,倍增,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/P7599 题目大意 \(n\)棵树,在某棵树上时可以选择向左右两边第一棵比它高的树跳,现在\(q\)次询问从\([A ...
- P3643-[APIO2016]划艇【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3643 题目大意 求有多少个\(n\)个数的序列\(x\)满足,\(x_i\in \{0\}\cup[a_i,b_ ...
- python3之cx_Freeze使用(PyQt5)
1. cx_Freeze简介 Python脚本在装有Python的系统中可以直接双击运行,但绝大多数普通用户并没有配置此类环境,而编译为可执行二进制文件后,用户无需预先安装Python及依赖库即可 ...
- IO流基本概念
IO流主要分为两类 节点流:直接能够进行数据写入或读取的I0流.可以单独执行读写操作,但是功能比较单一,只能进行一些基本 的操作.例如:FileInputStream FileInputStream ...
- Unity——基于UGUI的UI框架
基于UGUI的UI框架 一.Demo展示 二.关键类 MonoSingle 继承MonoBehaviour的单例基类:做了一些特殊处理: 保证场景中必须有GameInit名称的物体,所有单例管理器脚本 ...
- NER为什么那么难
命名实体识别(Name Entity Recognition) 是自然语言处理中一个比较基础的问题.要解决的问题是,从unstructure的文本当中找到实体并归类.当然我这么定义已经有了一定的bia ...
- ORA-4031诊断分析
1.Environment11.2.0.4 RAC 2.Symptomsrac的一节点alert日志一直刷ORA-4031报错,提示shared pool不足,二节点并没有此报错 Sat Oct 09 ...
- 【Java虚拟机5】Java内存模型(硬件层面的并发优化基础知识--指令乱序问题)
前言 其实之前大家都了解过volatile,它的第一个作用是保证内存可见,第二个作用是禁止指令重排序.今天系统学习下为什么CPU会指令重排. 存储器的层次结构图 1.CPU乱序执行指令的根源 CPU读 ...
- MySQL复习(二)MySQL基本数据类型
MySQL基本数据类型 常用的字段类型大致可以分为数值类型.字符串类型.日期时间类型三大类 1. 数值类型 数值类型可以分为整型.浮点型.定点型三小类. 1.1 整型 (tiny:极小的, small ...