Java基础之数组

java

Java数组

数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。

数组是通过方括号下标操作符[ ]来定义和使用的。

数组为什么特殊

Java中还有其他持有对象的方式,为什么会有数组?

数组和其他种类容器的区别有三方面:效率、类型和保存基本类型的能力。

  • 效率

    数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快速。但是这种速度的代价是数对象的大小被固定,并且在其生命周期中不可改变。

  • 类型

    在泛型之前,其他容器类处理对象时,都没有任何具体类型。数组由于泛型前的容器,就是你可以创建一个数组去持有某种类型。这意味着编译期会进行检查。

  • 基本类型

    数组可以持有基本类型,而泛型之前的容器不能。

但有了泛型,容器就可以指定并检查它们所持有对象的类型,并且有了自动包装机制,容器也可以保存基本类型。

定义数组

支持两个格式

type[ ] arrayName;

type arrayName[];

编译器不允许指定数组大小,所以定义数组时不能指定数组的长度

初始化

初始化是为数组赋值,不然数组只有引用,无实际对象。

  1. 静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度

    语法格式如下:

    arrayName = new type[ ]{element1,element2,element3..}

    或简化写法

    arrayName = {element1,element2...}

  2. 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

    语法格式如下:

    int[ ] prices = new int[5];

    object[] books = new String[4];

    系统分配初始值规则

  • 整数类型(byte,short,int,long),则数组元素值为0.
  • 浮点类型(float,double),则数组元素值为 0.0;
  • 字符类型 (char),则数组元素的值为\'\u0000\'
  • 布尔类型 (boolean),则数组元素的值为false;
  • 引用类型 (类,接口和数组),则数组元素的值为null;

使用数组

访问数组元素通过在数组引用变量后紧跟一个方括号,方括号里是数组元素的索引值。

多维数组

实际上还是一维数组,只是每个一维数组的元素保存一个数组对象

语法格式:

String[ ][ ] str1 = new String[ ][ ]{new String[3],new String[]{"hello"}};

可变参数

public class NewVarArgs {

static void printArray(Object... args){

for(Object obj:args)

System.out.print(obj+" ");

System.out.println();

}

public static void main(String[] args) {

printArray(new Integer(47),new Float(3.14),new Double(11.11));

printArray(47,3.14F,11.11);

printArray("one","two","three");

printArray((Object[])new Integer[]{1,2,3,4});

printArray();

}

}

有了可变参数,不用显式编写数组语法,当指定参数时,编译器实际上会为你去填充数组。

注意程序倒数第二行,一个Integer数组被转换成Object数组,并传递给printArray方法,编译器发现它已经是一个数组了,所以不会在其上执行任何转换了。

因此该特性由两点好处,1.如果你有一组事物,可以把它们当成列表传递。2.如果你已经有一个数组,该方法可以把它们当作可变参数列表来接受。

可变参数与自动包装机制可以和谐共处。而且并不依赖自动包装机制,实际上使用的是基本类型。

Arrays实用功能

复制数组

System.arraycopy()或Arrays.copyOf()这里的复制都是浅拷贝,而且不会执行自动包装和自动拆包,所以针对所有类型进行了重载。

数组的比较

Arrays提供的equals()方法,用来比较整个数组。此方法针对所有基本类型与Object做了重载。数组相等的条件是元素个数必须相等,并且对应位置的元素也相等。

多维数组用deepEquals()比较。

数组元素的比较

排序必须根据对象的实际类型执行比较操作。这里采用策略设计模式,通过这种方式能够用不同对象来表示不同的比较方式,然后将它们传递给相同的排序代码。

Java有两种方式提供了比较功能,第一种是实现java.lang.Comparable接口

第二种是创建一个实现了Comparator接口的单独的类。这个类有compare()和equals()两个方法,equals方法不一定要实现,使用object的equals方法一般可以达到要求。Collections类包含一个reverseOrder方法,可以产生一个Comparator,它可以反转自然的排序顺序。

数组的排序

使用内置的排序方法sort(),就可以对任意的基本类型数组排序;也可以对任意的对象数组进行排序,只要该对象实现了Comparable接口或具有相关联的Comparator。

在已经排序的数组中查找

如果数组已经排好序了,就可以使用Arrays.binarySearch()执行快速查找

以上是 Java基础之数组 的全部内容, 来源链接: utcz.com/z/393220.html

回到顶部