当前位置: 首页 / 技术干货 / 正文
好程序员Java教程分享之数组知识梳理

2020-02-21

好程序员 Java教程

好程序员Java教程分享之数组知识梳理,Java是一门面向对象编程语言,具有简单易用、功能强大的特征。数组是同类型数据的有序集合,在Java中是引用数据类型,引用数据类型值都存储在堆中。有很多新手初学Java数组觉得难度大,接下来的好程序员Java教程就给大家简单梳理一下数组相关的知识点。

数组

数组的定义及初始化

1、定义一个数组的格式为:数据类型[] 数组名称;数据类型代表数组中保存的数据全都是统一的哪种类型。通过数组名称可以使用其中的多个数据。

2、数组一定要初始化之后才可以使用。初始化是指:为数组在内存当中开辟内存空间,用来保存数据,并且设置默认值。没有初始化的数组无法使用。数组的初始化方式分成两种:

1)动态初始化,指定长度。格式为:

数据类型[] 数组名称 = new 数据类型[长度];

数据类型[] 数组名称;

数组 = new 数据类型[长度];

数组元素的默认值规则为:整数默认为0,浮点数默认为0.0,字符默认为’\u0000’,布尔值默认为false,字符串等引用类型默认为null

 

2) 静态初始化,指定内容。除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

int[] a = { 1, 2, 3};// 静态初始化基本类型数组

Man[] mans = { newMan(1, 1), newMan(2, 2) };// 静态初始化引用类型数组

访问数组元素

直接打印数组的名称,得到的是内存地址值(的哈希值)。要想访问数组中的元素,需要使用格式:数组名称[索引编号]

其中索引编号是数组中元素的int型数字编号,从0开始,一直到数组的长度-1为止。

获取数组长度

无论是动态还是静态初始化,数组一定是具有长度的。获取长度的格式:数组名称.length

这将得到一个int数字代表长度,注意,数组在内存当中一旦被创建,那么长度不可改变。

数组索引越界异常

如果访问的数组元素索引并不存在,那么将会发生异常:java.lang.ArrayIndexOutOfBoundsException

注意,数组元素索引编号从0开始,一直到数组长度-1”为止。

数组遍历

public static void main(String[] args) {

int[] arr = new int[3]

;for (int i = 0; i < arr.length; i++) {arr[i] = i + 1;

}

System.out.println(Arrays.toString(arr)); // 输出 [1, 2, 3]

}

如果不需要使用数组小标的化可以使用简化语法:for each,格式为:

for (type item : arrName) {... // 操作}

如:

public static void main(String[] args) {

String[] arr = new String[]{

"hello", "world", "!!"

};for (String v : arr) {

System.out.println(v); // 循环输出arr中的字符串

}

}

数组复制

1) System.arraycopy() 系统提供的方法:

/*** @param src 原数组* @param srcPos 拷贝原数组起始位置* @param dest 目标数组* @param destPos 目标数组起始位置* @param length 拷贝数组元素个数*/public static void native arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

clone对象克隆:

int[] src = {1, 2, 3};int[] dest = src.clone();

3) Arrays.copyOfArrays.copyOfRange 方法

int[] src = {1, 2, 3};

int[] dest1 = Arrays.copyOf(src, 3);

int[] dest2 = Arrays.copyOfRange(src, 1, 3);

System.out.println(Arrays.toString(dest1)); // 输出:[1, 2, 3]

System.out.println(Arrays.toString(dest2)); // 输出:[2, 3]

4) for 循环,挨个元素复制

int[] src = new int[]{1, 2, 3};

int[] dest = new int[3];

for (int i = 0;

i < src.length; i++) {

dest[i] = src[i];

}

System.out.println(Arrays.toString(dest)); // 输出:[1, 2, 3]

数组排序

static void sort(int[] a) // 对整型数组比较后按升序排序

static void sort(int[] a, int fromIndex, int toIndex) // 对整型数组比较指定范围数据按升序排序

public static<T> void sort(T[] aComparator c) // 根据指定比较器产生的顺序对指定对象数组进行排序

public static<T> void sort(T[] aint fromIndexint toIndexComparator c) // 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序

数组查找/搜索

Arrays.binarySearch(Object[] arr, Object key)

arr:要搜索的数组,搜索前必须对数组先进行sort排序

key:要搜索的值返回值:如果keyarr中,则返回搜索值得索引,否则返回-1-[插入点索引值]

插入点索引值:

1)key不在arr中,且在数组值范围内,从1开始计数,索引值为-[插入点索引值]

2)key不在arr中,且大于数组内元素,索引值为-[arr.length + 1];

3)key不在arr中,且小于数组内元素,索引值为-1

Arrays.binarySearch(Object[] arr, int fromIndex, int toIndex, Object key)

arr:要搜索的数组,搜索前必须对数组先进行sort排序

fromIndex:查找起始位置

toIndex:查找结束位置

key:要搜索的值

返回值:如果keyarr查找范围中,则返回搜索值得索引,否则返回-1-[插入点索引值]

插入点索引值:

1)key不在arr中,且在数组值范围内,从1开始计数,索引值为-[插入点索引值]

2)key不在arr中,且大于范围数组内元素,索引值为-[toIndex + 1];

3)key不在arr中,且小于范围数组内元素,索引值为-[fromIndex + 1]

  Java基础知识点繁多,你需要认真掌握。如果你想快速系统的入门Java开发、掌握企业所需的核心技术点,可以来好程序员Java培训班。专业大牛讲师全程面授,以就业为导向、以实战项目驱动教学过程和内容,实力打造上岗即用的精英人才!感兴趣的小伙伴,也可以先关注微信公众号“好程序员”咨询了解,同时好程序员还为大家准备了大量免费Java教程供大家参考学习。

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号