java——数组

目录

1、数组的声明

1.1、一维数组的声明

1.2、二维数组的声明

2、数组的初始化

2.1、一维数组的静态初始化

2.2、一维数组的动态初始化

2.3、二维数组的静态初始化

2.4、二维数组的动态初始化

3、匿名数组

4、for each循环

5、命令行参数

6、数组拷贝

7、数组排序

8、常用API


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

1、数组的声明

1.1、一维数组的声明

type[] arrayName; //声明方式一
type arrayName[]; //声明方式二

注意,声明数组时不能指定数组长度。

1.2、二维数组的声明

type[][] arrayName; //声明方式一
type[] arrayName[]; //声明方式二

2、数组的初始化

所谓初始化,就是为数组分配内存空间,并为每一个元素赋初值。数组的初始化有两种方式:静态初始化和动态初始化。

2.1、一维数组的静态初始化

静态初始化是指初始化时直接显式地给出每个数组元素的初始值,由系统根据元素个数决定数组的长度。语法格式如下:

arrayName = new type[]{元素1, 元素2, 元素3...}

例:

int[] array;
array = int[]{1, 2, 3};
//或
int[] array = new int[]{1, 2, 3};
//或
int[] array = {1, 2, 3};

2.2、一维数组的动态初始化

动态初始化是指初始化时先为数组指明长度(分配内存空间),再为数组中元素赋初值。语法格式如下:

type[] arrayName = new type[length];

例:

int[] arrayInt = new int[3];
String[] arrayString = new String[3];

2.3、二维数组的静态初始化

语法格式如下:

arrayName = new type[][]{元素1, 元素2, 元素3...}

例:

int[] array = new int[][]{{80, 85}, {90, 94, 80}};

注意,二维数组每一行存储的元素个数可以是不相同的。

2.4、二维数组的动态初始化

由于二维数组是存储多行多列的数据,二维数组的动态初始化分两种情况:

(1)直接为每个元素分配空间

语法格式和实例如下:

type[][] arrayName = new type[arrayLength1][arrayLength2];
int[][] arrayInt = new int[2][3];

(2)从高维开始,分别为每一维分配空间

即首先要确定二维数组的行数,然后再为每一行分配各个元素的内存空间,如:

int[][] intArray;
intArray = newint[3][];
intArray[0] = new int[1];
intArray[1] = new int[2];
intArray[2] = new int[3];

3、匿名数组

匿名数组即不声明变量名,而直接初始化一个匿名的数组: new int[] {17, 19, 23, 29, 31, 37},如:

int[] smallPrimes;
smallPrimes = new int[] {17, 19, 23, 29, 31, 37};
//等同于
int[] smallPrimes;
int[] anonymous = {17, 19, 23, 29, 31, 37};
smallPrimes = anonymous;

4、for each循环

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

for(variable:collection) statement

 例:

for(int element : a) System.out.println(element);

打印数组a的每一个元素。

传统for循环:

for(int i = 0; i < a.lenght; i++) System.out.println(a[i]);

for each循环语句相较于传统的for循环更加简介、更不易出错(不必为下标的起始值和终止值而操心)

注:要想获得数组中的元素个数,可以使用array.length。

注:for each循环语句的循环变量将会遍历数组中的每个元素,而不需要使用下标值。

5、命令行参数

每一个Java应用程序都有一个带String[] args参数的main方法,这个参数表明main方法将接受一个字符串数组,也就是命令行参数。

例:

public class Message{
    public static void main(String[] args){
        if(args[0].equals("-h")) System.out.print("Hello,");
        else if(args[0].equals("-g")) System.out.print("Goodbye,");
        //print the other command-line arguments
        for(int i = 1; i < args.length; i++) System.out.print(" " + args[i]);
        System.out.print("!");
    }
}

运行结果示例:

6、数组拷贝

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

int[] smallPrimes = {2, 3, 5, 7, 11, 13};
int[] luckyNumbers = smallPrimes;
smallPrimes[5] = 12; // now luckyNumbers[5] is also 12.

如果希望一个数组的值全部拷贝到另一个数组上,要使用Arrays类的copyTo方法:

int[] smallPrimes = {2, 3, 5, 7, 11, 13};
int[] copiedLuckyNumbers = Arrays.coopyOf(smallPrimes, smallPrimes.length);

注:Java数组与C++数组在堆栈上有很大不同,但基本上与分配在堆(heap)上的数组指针一样。也就是说,int[] a = new int[100]; //Java 不同于 int a[100]; //C++ 而等同于 int *a = new int[100]; //C++ 

7、数组排序

要想对数值型数组进行排序,可以使用Arrays类中的sort方法:

int[] a = new int[1000];
......
Arrays.sort(a)

这个方法使用了优化的快速排序算法。

8、常用API

位于java.util.Arrays 1.2版本中的一些常用API:

static String toString(type[] a):返回包含a中数据元素的字符串,这些数据元素被放在括号内,并用逗号分隔。

static type copyOf(type[] a, int length)

static type copyOf(type[] a, int start, int end):返回与a类型相同的一个数组,其长度为length或者end-start,数组元素为a的值。

static void sort(type[] a):采用优化的快速排序算法对数组进行排序。

static int binarySearch(type[] a, type v)

static int binarySearch(type[] a, int start, int end, type v):采用二分搜索算法找值v,如果查找成功,则返回下标值,否则返回一个负数值r。

static void fill(type[] a, type v):将数组的所有数据元素值设置为v。

static boolean equals(type[] a, type[] b):如果两个数组大小相同,并且下标相同的元素都对应相等,返回true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值