Java基础(五):数组
数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间。
创建一个数组
在Java中,我们可以通过[]去声明一个指定类型的数组
int[] a; // 写法一
int a[]; // 写法二
当然,一般情况下我们更喜欢使用第一种方式来声明一个数组,因为它将类型与变量名分开,优化了代码的可读性。
刚刚我们只是声明了一个数组 a ,但是并没有将 a 初始化为一个真正的数组。
在给数组赋值时,我们可以通过三种方式
int[] a = new int[4];
int[] a = new int[]{1,2,3,4};
int[] a = {1,4,3,2}
其中第三种实际上是第二种的简写,我们可以通过使用 new 关键字去创建一个匿名的数组
new int[4];
但是记得一定要指定长度或者指定数组中的元素,这里如果想要创建一个匿名的数组,new关键字是必不可少的
{1,2,4,3} // 这样写是错误的!
无论我们怎么去定义一个数组,它的长度在创建之初都是被确定的,但是需要注意一点,它的长度也不是无穷无尽的,我们可以通过查看反射包中的Array类源码获得它的长度数据类型:
public static Object newInstance(Class<?> componentType, int length)
throws NegativeArraySizeException {
return newArray(componentType, length);
}
这里可以看到数组的数据类型是int类型,而int类型在前面我们也提过,它的最大长度是\(2^{31}\),也就是2GB。
访问数组中的元素
我们可以通过下标的方式来访问数组中的元素,数组的下标从0开始,最大长度是数组的长度,如果我们访问超出数组下标范围的数据,就会抛出索引越界异常( ArrayOutOfIndexError ),因为我们可以通过下标直接访问数组中的元素,所以时间复杂度是O(1)。
int[] a = {1,2,3};
System.out.println(a[0]); // 1
往数组中添加元素
刚刚我们说过,数组中的长度是固定的,所以我们无法去改变该数组的结构,但是我们可以通过另外一种方法来实现这样的效果
int[] arr = {9,7,5};
int[] temp = new int[arr.length+1];
for(int i = 0;i < arr.length;i++) {
temp[i]=arr[i];
}
temp[arr.length] = 6;
arr = temp;
我们来画图分析一下

删除元素
和新增一样,删除数组中的元素同样是不允许的,我们可以通过和新增类似的方式来完成删除的操作
int[] arr = { 1, 2, 3, 4, 5};
int[] tmp = new int[arr.length - 1];
for (int i = 0; i < tmp.length; i++) {
tmp[i] = arr[i];
}
arr = tmp;
原理上和新增是比较类似的,这里我就不再画图去详细的说明了
二维数组
我们像创建一维数组一样可以创建一个二维数组
int[][] doubleArr = new int[2][3];
int[][] doubleArr = {{1,2,3,4},{5,6,7,8}};
int[][] doubleArr = new int[5][];
这里需要注意一点,二维数组的创建时,可以指定一个维度的长度,而不指定第二维度的长度,使之动态的变化。比如我们可以画个星星
String[][] arr = new String[5][];
for (int i = 0; i < arr.length; i++) {
arr[i] = new String[i + 1];
for (int j = 0; j < arr[i].length;j++) {
arr[i][j] = "*";
}
}
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();
}

公众号

Java基础(五):数组的更多相关文章
- Java基础五(方法)
今日内容介绍1.方法基础知识2.方法高级内容3.方法案例 ###01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. ###02方法的定义格 ...
- 面渣逆袭:Java基础五十三问,快来看看有没有你不会的!
大家好,我是老三, 面渣逆袭 系列继续.这节我们回到梦开始的地方--Java基础,其实过了萌新阶段,面试问基础就问的不多,但是保不齐突然问一下.想一下,总不能张口高并发.闭口分布式,结果什么是面向对象 ...
- Java基础-反转数组
/** java基础,如何将一个数组反转,思考方法采用使用临时变量的情况下,将第一个元素与第二个元素进行反转,需要定义两个索引,一个记录数组的第一个元素与最后一个元素,将其两两交换* */public ...
- Java基础之 数组详解
前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...
- java基础(十) 数组类型
1. 数组类简介 在java中,数组也是一种引用类型,即是一种类. 我们来看一个例子,理解一下数组类: public static void main(String[] args) { Class ...
- java 基础概念 -- 数组与内存控制
问题1: Java在声明数组的过程中,是怎样分配内存的? 在栈内存中 建一个数组变量,再在堆内存中 建一个 数组对象.至于详细的内存分配细节,还得看 该初始化是 数组动态初始化 还是 数组静态初始化. ...
- Java基础(五) final关键字浅析
前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提 ...
- Java基础:数组的声明,循环,赋值,拷贝。
数组的声明 一般有两种形式的声明: int[] a; int a[]; 这两种声明都没错,但是大多数都使用第一种声明,因为变量名是独立的,不带任何符号. 声明一个数组,并没有将a真正的初始化为一个数组 ...
- Java基础总结--数组
---数组的定义---组织存储一组数据1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据eg.买一盘鸡蛋--蛋托其实就是容 ...
- Java基础(五)-Java序列化与反序列化
.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...
随机推荐
- Linux基础快捷键
- miracle|
N-COUNT 奇迹;出人意料的事If you say that a good event is a miracle, you mean that it is very surprising and ...
- Ajax 请求参数过多导致 400 错误 and BCryptPasswordEncoder 加密判断
2019/06/19 先分享一种密码加密方式: Spring Security 提供了 BCryptPasswordEncoder类, 实现Spring的PasswordEncoder接口使用BCry ...
- Modelsim自动化仿真之do文件书写
创建本地库 vlib ./work You must use vlib rather than operating system commands to creat a library directo ...
- mvn -v报java.lang.ClassNotFoundException
Tips: 比如要下载版本3.2.5的,请选择binaries下的apache-maven-3.2.5-bin.zip. binaries 指的是可以执行的. source 指的源码. 下载地址:ht ...
- res文件夹及xml资源文件详解
目录 一.values文件:存放字符串(strings).颜色(colors).尺寸(dimens).数组(arrays).样式(styles类似于CSS文件).类型等资源 二.drawable:存放 ...
- 吴裕雄--天生自然KITTEN编程:忍者追宝
- IT培训的背后,是“韭菜”的躺赚梦!
作者:九歌 本文转自公众号:Hack 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正 导语 为什么要写这篇文章呢,近些年培训这个话题也比较火,很多在看这篇文章 ...
- iOS多线程开发之NSOperation
一.什么是NSOperation? NSOperation是苹果提供的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更加的面向对象.代码可读性更高.可控性更强 ...
- 工业界 vs. 学术界: 一个年轻员工的视角
本文发表于<中国计算机学会通讯>2015年第5期,转载已获得授权 作者:菲利普·郭 (Philip Guo),美国罗切斯特大学助理教授 译者:王长虎,微软亚洲研究院主管研究员 如果你即将 ...