定义数组

方式1(推荐,更能表明数组类型)

方式2(同C语言)

方式3定义时直接初始化

数组运用基础

数组长度

equals()

数组元素不为基本数据类型时

二维数组

二维数组基础

变长的二维数组

java.utils.Arrays 类

参考文献:

 

数组(Array):相同类型数据的集合。

定义数组

方式1(推荐,更能表明数组类型)

type[] 变量名 = new type[数组中元素的个数];

比如:

int[] a = new int[10];

数组名,也即引用a,指向数组元素的首地址。

方式2(同C语言)

type变量名[] = new type[数组中元素的个数];

比如:

int a[] = new int[10];

方式3定义时直接初始化

type[] 变量名 = new type[]{逗号分隔的初始化值};

其中红色部分可省略,所以又有两种:

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

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

其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。

数组运用基础

数组长度

Java中的每个数组都有一个名为length的属性,表示数组的长度。

length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。

equals()

数组内容的比较可以使用equals()方法吗?

如下程序:

public
static
void main(String[] args) {

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

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

 

        System.out.println(a.equals(b)); // false

        System.out.println(Arrays.equals(a, b)); // true

    }

输出为:

false

true

所以证明不能直接用equals()方法比较数组内容,因为没有override Object中的实现,所以使用的是其内存地址进行比较,也就是采用==实现equals()方法,比较是否为同一个对象。

怎么比较呢?一种解决方案是自己写代码,另一种方法是利用java.util.Arrays的equals方法。

数组元素不为基本数据类型时

数组元素不为基本原生数据类型时,存放的是引用类型,而不是对象本身。当生成对象之后,引用才指向对象,否则引用为null。

如下列程序:

package array;

 

public
class ArrayTest2 {

    public
static
void main(String[] args) {

        Person[] p = new Person[3];

 

        // 未生成对象时,引用类型均为空

        System.out.println(p[0]);

 

        // 生成对象之后,引用指向对象

        p[0] = new Person(10);

        p[1] = new Person(20);

        p[2] = new Person(30);

 

        for (int
i = 0; i < p.length; i++) {

            System.out.println(p[i].age);

        }

    }

}

 

class Person {

    int
age;

 

    public Person(int
age) {

        this.age = age;

    }

}

输出为:

null

10

20

30

也可以在初始化列表里面直接写:

Person[] p = new Person[]{new Person(10), new Person(20), new Person(30)};

二维数组

二维数组是数组的数组。

二维数组基础

基本的定义方式有两种形式,如:

type[][] i = new type[2][3];(推荐)

type i[][] = new type[2][3];

如下程序:

package array;

 

public
class ArrayTest3 {

    public
static
void main(String[] args) {

 

        int[][] i = new
int[2][3];

 

        System.out.println("Is i an Object? " + (i
instanceof Object));

 

        System.out.println("Is i[0] an int[]? " + (i[0] instanceof
int[]));

 

    }

}

输出为:

Is i an Object? true

Is i[0] an int[]? true

变长的二维数组

二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的。

声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组。但是注意,第一维大小不能空缺(不能只指定列数不指定行数)。

如下程序:

package array;

 

public
class ArrayTest4 {

    public
static
void main(String[] args) {

        // 二维变长数组

        int[][] a = new
int[3][];

        a[0] = new
int[2];

        a[1] = new
int[3];

        a[2] = new
int[1];

 

        // Error: 不能空缺第一维大小

        // int[][] b = new int[][3];

    }

}

二维数组也可以在定义的时候初始化,使用花括号的嵌套完成,这时候不指定两个维数的大小,并且根据初始化值的个数不同,可以生成不同长度的数组元素。

如下程序:

package array;

 

import java.util.Arrays;

 

public
class ArrayTest5 {

    public
static
void main(String[] args) {

 

        int[][] c = new
int[][] { { 1, 2, 3 }, { 4 }, { 5, 6, 7, 8 } };

 

        for (int[] arr : c) {

            System.out.println(Arrays.toString(arr));

        }

    }

}

输出为:

[1, 2, 3]

[4]

[5, 6, 7, 8]

java.utils.Arrays 类

public class Arrays

extends Object

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出
NullPointerException。

此类中所含方法的文档都包括对实现
的简短描述。应该将这些描述视为实现注意事项,而不应将它们视为规范
的一部分。实现者应该可以随意替代其他算法,只要遵循规范本身即可。(例如,sort(Object[])
使用的算法不必是一个合并排序算法,但它必须是稳定的。)

此类是
Java Collections Framework
的成员。

具体说明请查看下表:

方法

说明

asList

将数组转成List,基本类型的数组。此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。

binarySearch

使用二分搜索法来获得索引位置

copyOf

复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。

copyOfRange

将指定数组的指定范围复制到一个新数组。

equals和deepEquals

区别是deepEquals适用于多维数组

hashCode和deepHashCode

deepHashCode基于指定数组的"深层内容"返回哈希码。如果deepEquals的结果是true,则deepHashCode相等

fill

将指定的 boolean 值分配给指定 boolean 型数组的每个元素。

sort

对数组进行排序

toString

返回指定数组内容的字符串表示形式。

 

 

 

 

 

参考文献:

Java 数组基础

菜鸟教程——Java数组

JDK API 1.6.0 中文版

Java 数组基础,java.util.Arrays的更多相关文章

  1. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  2. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

  3. [ Java学习基础 ] Java的抽象类与接口

    一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...

  4. 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数

    Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...

  5. Java 学习(20):Java Applet 基础 & Java 文档注释

    -- Java Applet 基础 -- Java 文档注释 Java Applet 基础 Applet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Ja ...

  6. java数组、java.lang.String、java.util.Arrays、java.lang.Object的toString()方法和equals()方法详解

    public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...

  7. Java 数组基础

    数组 数组(Array):相同类型数据的集合. 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数]; 比如: int[] a = new int ...

  8. java数组基础

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  9. Java数组操作利器:Arrays工具类

    java.util.Arrays提供大量的工具方法来操作数组,这些方法全是静态方法. 1 便捷创建List public static <T> List<T> asList(T ...

随机推荐

  1. 2015南阳CCPC F - The Battle of Guandu 多源多汇最短路

    The Battle of Guandu Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description In the year of 200, t ...

  2. poj1190生日蛋糕

    生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12277 Accepted: 4325 Description 7月1 ...

  3. 奇妙华为3c手机, 出现安装未成功问题。

    1.我会命令adb uninstall 先卸载我们有签名的安装包. 2.用开发模式在手机上执行我们的应用. 3.然后測试就把手机拿走了,就用应用管理器把我们的应用卸载了. 4.继续装我们的开发包,死活 ...

  4. delphi Sender和Tag的用法

    var  Form1: TForm1;  SelectedColor:TColor;//clBlack; //Defaultimplementation{$R *.dfm}procedure TFor ...

  5. JVM自动内存管理学习笔记

    对于使用 C.C++ 的程序员来说,在内存管理领域,他们既是拥有最高权力的皇帝又是从事最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任.对于 Java 程 ...

  6. CSS文字大小单位px、em、pt(转)

    这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平时都是用p ...

  7. php版DES

    class DES { var $key; var $iv; //偏移量 function DES( $key, $iv=0 ) { //key长度8例如:1234abcd $this->key ...

  8. Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作

    SQLite  是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...

  9. linux云计算集群架构学习笔记:rhel7基本命令操作

     1-3-RHEL7基本命令操作 1.1Linux终端介绍 Shell提示符 Bash Shell基本语法. 1.2基本命令的使用:ls.pwd.cd. 1.3查看系统和BIOS硬件时间. 1.4 L ...

  10. [改善Java代码]枚举和注解结合使用威力更大

    注解的写法和接口很类似,都采用了关键字interface,而且都不能有实现代码,常量定义默认都是pulbic static final类型的. 他们的主要不同点是:注解在interface前加上@字符 ...