数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同无序的元素的存储在固定长度有序的内存空间。

创建一个数组

在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基础(五):数组的更多相关文章

  1. Java基础五(方法)

    今日内容介绍1.方法基础知识2.方法高级内容3.方法案例 ###01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. ###02方法的定义格 ...

  2. 面渣逆袭:Java基础五十三问,快来看看有没有你不会的!

    大家好,我是老三, 面渣逆袭 系列继续.这节我们回到梦开始的地方--Java基础,其实过了萌新阶段,面试问基础就问的不多,但是保不齐突然问一下.想一下,总不能张口高并发.闭口分布式,结果什么是面向对象 ...

  3. Java基础-反转数组

    /** java基础,如何将一个数组反转,思考方法采用使用临时变量的情况下,将第一个元素与第二个元素进行反转,需要定义两个索引,一个记录数组的第一个元素与最后一个元素,将其两两交换* */public ...

  4. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  5. java基础(十) 数组类型

    1. 数组类简介   在java中,数组也是一种引用类型,即是一种类. 我们来看一个例子,理解一下数组类: public static void main(String[] args) { Class ...

  6. java 基础概念 -- 数组与内存控制

    问题1: Java在声明数组的过程中,是怎样分配内存的? 在栈内存中 建一个数组变量,再在堆内存中 建一个 数组对象.至于详细的内存分配细节,还得看 该初始化是 数组动态初始化 还是 数组静态初始化. ...

  7. Java基础(五) final关键字浅析

    前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提 ...

  8. Java基础:数组的声明,循环,赋值,拷贝。

    数组的声明 一般有两种形式的声明: int[] a; int a[]; 这两种声明都没错,但是大多数都使用第一种声明,因为变量名是独立的,不带任何符号. 声明一个数组,并没有将a真正的初始化为一个数组 ...

  9. Java基础总结--数组

    ---数组的定义---组织存储一组数据1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据eg.买一盘鸡蛋--蛋托其实就是容 ...

  10. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

随机推荐

  1. JDBC原理之层次结构

    目录 JDBC的层次结构 前言 Collection角色 Statement角色 ResultSet角色 JDBC工作的基本流程 JDBC的层次结构 前言 JDBC API提供了以下接口和类: Dri ...

  2. springboot 配置热部署 及 热部署后依旧是404的坑

    springboot配置热部署的教程网上一大堆: 个人喜欢这种方式: https://www.cnblogs.com/winner-0715/p/6666579.html 本文主要强调的是,大家如果配 ...

  3. dos窗口运行python文件提示找不到模块

    问题:在pycharm直接运行test_suit.py正常,通过dos窗口运行则提示找不到模块. 原因: https://blog.csdn.net/crylearner/article/detail ...

  4. DailyRollingFileAppender-设置文件大小和备份天数

    感谢:http://byx5185.iteye.com/blog/1616034 1.重写FileAppender : package com.bankht.cis.tps.apps.tps.util ...

  5. 微软Project Oxford帮助开发人员创建更智能的应用

    Oxford帮助开发人员创建更智能的应用" title="微软Project Oxford帮助开发人员创建更智能的应用"> 假设你是一名对关于健身的应用充满奇思妙想 ...

  6. android framework 之JNI

    Java Native Interface ( JN I)是Java本地接口,所谓的本地(native) —般是指C/C++ ( 以下统称C)语言.当使用Java进行程序设计时,一般主要有三种情况需要 ...

  7. MHRD_Guide

    @(Steam蒸汽动力)[MHRD|Game|How To] [CH]游戏解决方案 1.解决方案将作为完整的代码呈现,部分结决方案将有理论分析或图解. 2.根据记录板判断,解决方案远非理想. 3.慎重 ...

  8. Python——7列表生成式

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  9. VM安装Linux Centos7.0虚拟机

    一.准备工作 1.安装VMware 官网https://www.vmware.com/cn.html 2.准备centos7的镜像文件 官网下载链接:http://isoredirect.centos ...

  10. git问题待更新

    git pull failed 错误解决 情况: 刚开始的项目,需要创建一个项目,然后pull从远端的项目,创建分支dev,然后从dev分支开始拉取远端的代码 出现错误,说git pull faile ...