🏡个人主页 :@ 守夜人st
🚀系列专栏:Java
…持续更新中敬请关注…
🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点
✈️推荐一款模拟面试,刷题,从基础走向大场面试👉 开启你的刷题之路吧
Java——数组
活动地址:CSDN21天学习挑战赛
在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性:
- 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
- 有序性:数组中的元素是有序的,通过下标访问(下标从0开始)。
- 不可变性:数组一旦初始化,则长度(数组中元素的个数)不可变。
数组简介(Array):
- java语言中数组是一种引用数据类型,不属于基本数据类型,其父类是Object。
- 数组其实上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合)。
- 数组当中可以存储基本数据类型,也可以存储引用数据类型的数据。
- 数组因为是引用类型,所以数组对象是在堆内存中(数组储存在堆当中)。
- 数组当中如果储存的是Java对象的话,实际上储存的是对象的”引用(内存地址)“。
- 数组一旦创建,在Java中规定,长度不可变。
- 数组的分类:一维数组和多维数组。
- 所有数组对象都有length属性,用来获取数组中元素的个数。
- 数组中要求储存的元素类型统一。
- 数组中的元素内存地址是连续的,数组其实是一种简单的数据结构。
- 数组中首元素的内存地址作为整个数组的内存地址。
- 数组这种数据结构的优点和缺点:
优点:查询/查找/检索某个下标元素的效率最高
- 每一个元素的内存地址在空间储存上是连续的
- 每一个元素的数据类型相同,所以占用空间大小一样
- 知道第一个元素的内存地址,知道每一个元素占用空间的大小,知道下标,就可以通过一个数学表达式计算出每一个元素的内存地址。
缺点:为了保证数组中每个元素的内存地址连续,在数组中随机删除或增加元素的时候,效率较低。因为随机增删元素会涉及到后面元素统一前移或后移的操作。存储大量数据的时候很难在内存空间上找到一块特别大的连续的内存空间。需要注意的是对数组最后一个元素的增删是没有效率影响的。
一维数组
声明/定义一个一维数组
语法格式:
在Java中均可正常编译执行,但是建议使用第一种风格;
元素数据类型[] 数组变量名;
元素数据类型 数组变量名[];
int[] array1; //Java风格
int intArray[]; //c++风格
float[] floatArray;
String strArray[];
Date[] dateArray;
初始化
静态初始化
int[] array = {100,2100,300,55};
动态初始化
//初始化一个长度为5的int类型数组,每个元素默认值为0
int[] array = new int[5];//这里表示数组元素的个数
String[] names = new Steing[6];
数据类型默认值
基本类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | ‘\u0000’ |
boolean | false |
引用 | null |
一维数组的遍历
int[] a = {15,28,37,49,0,159};
//从头开始遍历
for (int i = 0;i < a.length;i++){
System.out.println(a[i]);
}
//从尾开始遍历
for(int i = a.length - 1;i >= 0;i --){
System.out.println(a[i]);
}
**ArrayIndexOutOfBoundsException:**数组下标越界异常
package com.shouyerenst;
public class ArraysTest {
public static void main(String[] args) {
int[] a = {15,28,37,49,0,159};
for (int i = 0;i < a.length;i++){
System.out.println(a[i]);
}
System.out.println(a[6]);
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
at com.shouyerenst.ArraysTest.main(ArraysTest.java:9)
数组合并
public class HelloWorld {
public static void main(String[] args) {
// 两个待合并数组
int array1[] = { 20, 10, 50, 40, 30 };
int array2[] = { 1, 2, 3 };
// 动态初始化数组,设置数组的长度是array1和array2长度之和
int array[] = new int[array1.length + array2.length];
// 循环添加数组内容
for (int i = 0; i < array.length; i++) {
if (i < array1.length) {
array[i] = array1[i];
} else {
array[i] = array2[i - array1.length];
}
}
System.out.println("合并后:");
for (int element : array) {
System.out.printf("%d ", element);
}
}
}
多维数组
当数组中每个元素又可以带有多个下标时,这种数组就是“多维数组”。这里以二维数组为例讲解。
二维数组的声明
语法格式
元素数据类型[][] 数组变量名;
元素数据类型 数组变量名[][];
元素数据类型[] 数组变量名[];
示例:
int[][] array1;
int array1[][];
int[] array1[];
二维数组的初始化
静态初始化
我们很容易发现二维数组的每一个元素是一个一维数组。
int intArray[][] = { { 1, 2, 3 }, { 11, 12, 13 }, { 21, 22, 23 } };
严格意义上说Java中并不存在真正意义上的多维数组,只是一维数组,不过数组中的元素也是数组,以此类推三维数组就是数组的数组的数组了,例如{ { {1, 2},{3} }, { {21}, {22, 23} } }表示一个三维数组。
动态初始化
new 元素数据类型[高维数组长度] [低维数组长度] ;
int[][] intArray = new int[4][3];
上面的动态初始化是int类型,所以默认为0
0 | 0 | 0 |
---|---|---|
0 | 0 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
示例代码:
public class HelloWorld {
public static void main(String[] args) {
// 静态初始化二维数组
int[][] intArray = { { 1, 2, 3 }, { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } };
// 动态初始化二维数组 double[][] doubleArray = new double[4][3];
// 计算数组intArray元素的平方根,结果保存到doubleArray
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
// 计算平方根
doubleArray[i][j] = Math.sqrt(intArray[i][j]);
}
}
// 打印数组doubleArray,遍历二维数组
for (int i = 0; i < doubleArray.length; i++) {
for (int j = 0; j < doubleArray[i].length; j++) {
System.out.printf("[%d][%d] = %f", i, j, doubleArray[i][j]);
System.out.print('\t'); }System.out.println();
}
}
}
不规则数组
由于Java多维数组是数组的数组,因此会衍生出一种不规则数组,规则的4×3二维数组有12个元素,而不规则数组就不一定了。如下代码静态初始化了一个不规则数组。
int intArray[][] = { { 1, 2 }, { 11 }, { 21, 22, 23 }, { 31, 32,33 } };
高维数组是4个元素,但是低维数组元素个数不同,如图9-5所示,其中第1个数组有两个元素,第2个数组有1个元素,第3个数组有3个元素,第4个数组有3个元素。这就是不规则数组。 这里不作过多介绍。
算法对程序员来说及其重要,语言和开发平台不断变化,但是万变不离其宗的是那些算法和理论,刷算法最最最直白的原因就是找一个好的工作,那刷题一定是必不可少的
现在算法刷题平台还是蛮多的,给大家介绍一个我认为与大厂关联最深的平台——牛客网 跳转链接
感觉不错的话,动手点个赞吧!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/125497.html