之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组

数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。

数组

  - 相同数据类型的元素组成的集合

  - 元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素,除最后一个元素外,每一个元素都有唯一的后继元素(一个跟一个)

  - 可以通过元素所在的位置的顺序号(下标)做标识来访问每一个元素(下标为0开始,最大到元素个数 -1)

创建数组

 public class HelloWorld {
public static void main(String[] args) {
// 第一种:先声明一个数组变量 arr,然后把新创建的数组的引用赋值给变量 arr
int[] arr;
arr = new int[5]; // 第二种:数组变量的声明,和创建数组可以用一条语句完成
int[] arr1 = new int[5];
}
}

贴士:在 IDEA 编辑器下输入fori 然后回车就能生成  for (int i = 0; i < ; i++) { } ,输入 foreach 然后回车就能生成  for (:) { }

在上面的代码中我们声明了数组 arr,但是并没有为其赋值,那么系统将会自动为每个数组元素赋值,默认为 0,我们可以对每个元素赋值,也可以在初始化数组的时候赋值,如下代码:

 public class HelloWorld {
public static void main(String[] args) {
// 声明整型数组变量 arr,
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
// arr 数组默认值为 0
System.out.println(arr[i]); // 0 0 0 0 0
} // 声明整型数组变量 arr1,
int[] arr1 = new int[5];
arr1[0] = 0;
arr1[1] = 1;
arr1[2] = 2;
arr1[3] = 3;
arr1[4] = 4;
for (int i = 0; i < arr1.length; i++) {
// 输出 arr1 数组值
System.out.println(arr1[i]); // 0 1 2 3 4
} // 声明整型数组变量 arr2,arr12 赋值 [0,1,2,3,4]
int[] arr2 = {0, 1, 2, 3, 4};
for (int i = 0; i < arr2.length; i++) {
// 输出 arr2 数组值
System.out.println(arr2[i]); // 0 1 2 3 4
}
}
}

上面的代码我们使用 for 循环输出的数组每一个元素,我们还可以使用 for-each 输出:

 public class HelloWorld {
public static void main(String[] args) {
// 声明整型数组变量 arr,
double[] arr = {0.1, 1.2, 2.3, 3, 4};
for(double i : arr){
System.out.println(i); // 0.1 1.2 2.3 3.0 4.0
}
}
}

我们也可以将一个数组中的元素复制到另一个数组中去,如下:

 public class HelloWorld {
public static void main(String[] args) {
int[] arr1 = {0, 1, 2, 3, 4};
int[] arr2 = new int[5];
/**
* arr1:源数组
* 1:源数组起始下标
* arr2:目标数组
* 0:目标数组的起始下标
* 4:要复制的元素的个数
* */
System.arraycopy(arr1, 1, arr2, 0, 4);
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]); // 1 2 3 4 5 0
}
}
}

当然复制是不能超范围的,例如我们定义 arr2 的 length 为 3,即  int[] arr2 = new int[3]; ,那么要复制的个数已经超过了目标数组的长度,程序就会报错。

数组的长度在创建后是不可改变的,但是我么可以对其进行扩容,所谓扩容是指创建一个更大的新数组并将其原有数组的内容复制到其中,可以通过  Arrays.copyOf( ) 方法实现。

 public class HelloWorld {
public static void main(String[] args) {
int[] arr1 = {0, 1, 2, 3, 4};
// arr1 源数组 arr1.length+1 扩容数组长度
arr1 = Arrays.copyOf(arr1, arr1.length + 1);
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]); // 0 1 2 3 4 0
} }
}

当然我们也可以岁原有数组进行减容,只需要把 扩容数组长度 小于源数组即可,那么源数组末尾多出的元素将会被去掉。

java 为我们提供了一种简便的数组排序的方法, Arrays.sort( )

 public class HelloWorld {
public static void main(String[] args) {
int[] arr = {1,4,5,67,23,3};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 1 3 4 5 23 67
} }
}

Java 从入门到进阶之路(五)的更多相关文章

  1. Java 从入门到进阶之路(十五)

    在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...

  2. Java 从入门到进阶之路(二十五)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List的 增删改查和与数组间相互转换的方法,本章我们来看一下 Java 集合框架中的Collection 的 ...

  3. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  4. Java 从入门到进阶之路(一)

    写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...

  5. Java 从入门到进阶之路(二)

    之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...

  6. Java 从入门到进阶之路(三)

    之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...

  7. Java 从入门到进阶之路(四)

    之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...

  8. Java 从入门到进阶之路(六)

    之前的文章我们介绍了 Java 的数组,本章我们来看一下 Java 的对象和类. Java 是一种面向对象语言,那什么是对象呢,对象在编程语言中属于一个很宽泛的概念,我们可以认为万事万物都是对象,每个 ...

  9. Java 从入门到进阶之路(七)

    在之前的文章中我们介绍了一下 java 中的对象和类,接下来我们来看一下 Java 中的方法重载. 在显示生活中,我们肯定会遇到这样一个问题,那就是我们再商场买东西的时候在付账时的选择.如下 A:在收 ...

随机推荐

  1. ld: warning: directory not found for option ''

    iOS开发中经常遇到这样的警告,如图所示: 原因是存在未用到的目录. 解决方法:选择Build Settings,找到Search Paths中的Library Search Paths,如下图 删除 ...

  2. WIN10安装VC6.0无法使用的解决办法

    WIN10安装VC6.0无法使用的解决办法 VC6.0确实已经太老了 VC6.0实在是很久以前的开发工具了,现在的win10已经对该软件不兼容,但是为了能使抱着怀旧情节的初学者们能像教科书或老前辈们一 ...

  3. Windbg程序调试系列-索引篇

    最近整理了一下Windbg程序调试系列的文章,做个了索引贴,方便大家查询.搜索: Windbg程序调试系列1-常用命令说明&示例 Windbg程序调试系列1-Mex扩展使用总结 Windbg程 ...

  4. 一个基于TCP/IP的服务器与客户端通讯的小项目(超详细版)

    1.目的:实现客户端向服务器发送数据 原理: 2.建立两个控制台应用,一个为服务器,用于接收数据.一个为客户端,用于发送数据. 关键类与对应方法: 1)类IPEndPoint: 1.是抽象类EndPo ...

  5. SpringBoot:如何优雅地处理全局异常?

    之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Contro ...

  6. 【POJ - 2236】Wireless Network (并查集)

    Wireless Network 这接翻译了 Descriptions 地震发生在东南亚.ACM(亚洲合作医疗团队)已经与膝上电脑建立了无线网络,但是一次意外的余震袭击,网络中的所有计算机都被打破了. ...

  7. win10 我的电脑下面的六个文件夹的隐藏

      第一步   第二步     第三步 修改注册表,要隐藏那个文件夹,ThisPCPolicy 改为 "Hide" 修改我的文档的注册表值,使我的文档文件夹隐藏     <w ...

  8. manifest.json 解析--手机web app开发笔记(三-2)

    四.SDK配置和模块权限配置 SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”,也就是辅助开发某一类软件的相关文档.范例和工具的集合都可以叫做“S ...

  9. Spring入门(八):自动装配的歧义性

    1. 什么是自动装配的歧义性? 在Spring中,装配bean有以下3种方式: 自动装配 Java配置 xml配置 在这3种方式中,自动装配为我们带来了很大的便利,大大的降低了我们需要手动装配bean ...

  10. Spring Boot Security Oauth2之客户端模式及密码模式实现

    Spring Boot Security Oauth2之客户端模式及密码模式实现 示例主要内容 1.多认证模式(密码模式.客户端模式) 2.token存到redis支持 3.资源保护 4.密码模式用户 ...