java数组详解

数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。

在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。例如:

int[] a;

这条语句只是声明了变量a,并没有将a初始化为一个真正的数组,使用new运算符创建数组。

int[] a = new int[10];

创建一个数字数组时,所有元素都初始化为0,boolean数组的元素初始化为false,对象数组的元素初始化为null。

使用数组的length属性获取数组中的元素个数。例如:array.length。

注意:数组的下标从0开始。另外,在java中允许数组长度为0。
数组一旦创建,就不能再改变它的大小了。

1 for each循环

java有一种很强的循环结构,可以用来依次处理数组中的每一个元素(其他类型的元素集合亦可)而不必为指定下标值而分心。其格式为:

for(variable : collection) {
    statement //语句块
}

collection这一集合表达式必须是一个数组或者实现了Iterable接口的类对象(比如ArrayList)

2 数组初始化以及匿名数组

java提供了一种创建数组对象并同时赋予初始值的简化书写形式。例如:

int[] a = {1,2,3,4};

创建匿名数组:

new int[]{1,2,3,4}

这种表示法将创建一个新的数组并利用括号中提供的值进行初始化,数组的大小就是初始值的个数。使用这种语法形式可以在不创建变量的情况下重新初始化一个数组。

3 数组拷贝

在java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。

int[] a = {1,2,3,4};
int[] b = a;
b[1] = 5; //这时候a[1]也等于5

使用Arraysll类的copyOf()方法可以将一个数组的所有值拷贝到新的数组中去。

static int[] copyOf(int[] original, int newLength)

original指原数组,newLength指新的数组长度。如果新数组长度小于原数组则只拷贝最前面的数据元素。相反,则剩余的部分会进行初始化。例如:

int[] c = Arrays.copyOf(a,a.length+5);

这个方法通常用来增加数组的大小

4 数组排序

对数值型数组排序可以使用Arrays类中的sort方法。例如:

int[] a = {1,7,4,5,6,3};
Arrays.sort(a);

这个方法使用了优化的快速排序算法。快速排序算法对大多数集合来说都是效率比较高的。

5. Arrays类常用API说明
  • static String toString(type[] a)

    返回包含a中数据元素的字符串,这些数据元素放在括号内,并用逗号分隔.

    参数:a 类型为 int、long、short、char、byte、boolean、float或double的数组

  • static String deepToString(Object[] a)

    返回多维数组元素的字符串形式

  • static type[] copyOf(type[] original, int newLength)

  • static T[] copyOfRange(T[] original, int from, int to)

返回与original类型相同的一个数组,其长度为length或者to-from,数组元素为original的值。

参数:

  original 原始数组 
  newLength 新数组长度
  from 起始下标
  to 终止下标
  • static void sort(type[] a)

  • sort(type[] a, int fromIndex, int toIndex)

    采用优化后的快速排序算法对数组进行排序

    参数:

    a 类型为int、long、short、char、byte、boolean、float或double的数组

    fromIndex 起始下标

    toIndex 终止下标

  • static void parallelSort(type[] a)
    同sort(),但是采用的是并行排序,当数据量够大时拥有更好的性能

  • static type binarySearch(type[] a, type key)

  • static int binarySearch(type[] a, int fromIndex, int toIndex,type key)

    采用二分搜索算法查找值key。如果查找成功则返回相应的下标值;否则返回一个负数值r。-r-1是为保持a有序key应插入的位置。

    参数:

    a 类型为int、long、short、char、byte、boolean、float或double的数组

    fromIndex 起始下标

    toIndex 结束下标

    key 同a的数据元素类型相同的值。

  • static void fill(type[] a, type val)

    将数组的所有元素值设置为val。

    参数:

    a 类型为int、long、short、char、byte、boolean、float或double的数组

    val 与a数据元素类型相同的一个值

  • static boolean equals(type[] a1, type[] a2)

    如果两个数组大小相同并且下标对应的元素相同则返回true。

    参数: a1和a2 类型为int、long、short、char、byte、boolean、float或double的数组

  • static boolean deepEquals(Object[] a1, Object[] a2)

    判断两个多维数组是否相等。数组元素为基本数据类型时,依次比较值;数组元素为引用数据类型时,依次调用元素的 equals() 方法进行比较。即如果两个多维数组被认为是相等的,则两个多维数组中应包含相同顺序的相同元素。

  • static List asList(T… a)

    将数组转为集合

    参数:a 任意类型的数组

注意:该方法返回的是 Arrays 内部静态类 ArrayList,而不是我们平常使用的ArrayList,,该静态类ArrayList没有覆盖父类的add(), remove()等方法,所以如果直接调用,会报UnsupportedOperationException 异常

  • static int hashCode(type a[])

    返回数组的哈希值

    参数:a 类型为int、long、short、char、byte、boolean、float或double的数组

  • static int deepHashCode(Object a[])

    返回多维数组的哈希值

    参数:a 类型为int、long、short、char、byte、boolean、float或double的数组

  • static Stream stream(T[] array)

返回数组的流 (Stream)

  • static void setAll(T[] array, IntFunction<? extends T> generator)

    设置指定数组的所有元素,并使用提供的生成器函数计算每个元素。

  • static void parallelSetAll(T[] array, IntFunction<? extends T> generator)

    让数组中的所有元素,并行地使用方法提供的生成器函数来计算每个元素 (一元操作),当数据规模较大时,会有更好的性能。

6 多维数组

多维数组可以使用多个下标访问数组元素,它适用于表示表格或者更加复杂的排列形式。

java实际上上没有多维数组,只有一维数组,多维数组实际上是“数组的数组”。

java中声明一个二维数组比较简单,比如:

int[][] a = new int[4][4];

一般java中多维数组用到二维数组比较多。三维四维等很少见。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值