Java数组处理
Q7nl1s admin

Java数组简介

数组具有以下特点:

  • 数组可以是一维数组、二维数组或多维数组。
  • 数值数组元素的默认值为 0,而引用元素的默认值为 null。
  • 数组的索引从 0 开始,如果数组有 n 个元素,那么数组的索引是从 0 到(n-1)。
  • 数组元素可以是任何类型,包括数组类型。
  • 数组类型是从抽象基类 Array 派生的引用类型。

Java和C/C++中数组的工作原理不同,Java中数组本身时引用数据类型,它的长度属性是length。

对Java数组的总结

一维数组

1.两种声明类型:

type[] arrayName; // 数据类型[] 数组名;

或者

type arrayName[]; // 数据类型 数组名[];

2.分配空间

arrayName = new type[size]; // 数组名 = new 数组类型[数组长度];

3.三种初始化方法

Java有三种初始化数组的方式

  • 使用new指定数组大小后进行初始化
  • 使用new指定数组元素的值
  • 直接指定数组元素的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 使用new指定数组大小后进行初始化
int[] number = new int[5];
number[0] = 1;
number[1] = 2;
number[3] = 3;
number[4] = 5;
number[5] = 8;

// 使用new指定数组元素的值(2种方式)
int[] number = new int[]{1,2,3,5,8};
int[] number = new int[5]{1,2,3,5,8};

//直接指定数组元素的值(2种方式)
int[] number = {1,2,3,5,8};

int[] number;
number = {1,2,3,5,8};

4.使用

  • 获取单个元素
  • 获取全部元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int[] number = {1,2,3,5,8};
System.out.println("获取第一个元素:" + number[0]);

// 使用for语句获取全部元素
int[] number = {1,2,3,5,8};
for(int i = 0;i < 5;i++){
System.out.println("第" + (i + 1) + "个元素是" + number[i]);
}

// 使用foreach语句获取全部元素
int[] number = {1,2,3,5,8};
for(int val:number){
System.out.println("元素的值依次是:" + val + "\t");
}

二维数组

二维数组被看作数组的数组

1.两种声明方式

type[][] arrayName; // 数据类型[][] 数组名;

或者

type arrayName[][]; // 数据类型 数组名[][];

2.三种初始化方式

type[][] arrayName = new type[][]{值1,值2,值3,...,值n}; // 在定义时初始化

type[][] arrayName = new type[size1][size2]; // 给定空间,再赋值
type[][] arrayName = new type[size][]; // 数组第二维长度为空,可变化

1
2
3
4
5
6
// 定义时初始化
int[][] temp = new int[][]{{1,2},{3,4}};
// 给定空间再赋值
int[][] temp = new int[2][2];
// 数组第二维长度为空,可变化
int[][] temp = new int[2][];

3.使用

  • 获取单个元素:arrayName[i-1][j-1];arrayName 表示数组名称,i 表示数组的行数,j 表示数组的列数。
  • 获取全部元素:使用嵌套 for 循环或 for each 循环语句。
  • 获取整行元素:需要将行数固定,然后只遍历该行中的全部列即可。
  • 获取整列元素:获取指定列的元素与获取指定行的元素相似,保持列不变,遍历每一行的该列即可。

数组操作

1.比较数组

比较数组元素的个数和对应位置的元素是否相等。

Array.equals(arrayA,arrayB);

arrayA是用于比较的第一个数组,arrayB是用于比较的第二个数组。

2.填充数组

在指定位置进行数值填充。

Array.fill(array.value);

array表示数组,value表示填充的值。只能使用同一个数值进行填充。

3.数组查找

从数组种查询指定位置的元素,或者查询某元素在指定位置中的位置,语法格式如下。

binarySearch(Object[] a,Object key);

a表示要搜寻的数组,key表示要搜索的值。

在数组种指定范围内查找,语法格式如下。

binarySearch(Object[] a,int fromIndex,int toUndex,Object ket);

a表示要进行查找的数组,fromIndex指定范围的开始处索引(包含开始处),

toIndex指定范围的结束处(不包含结束处),key表示要搜索的元素。

4.复制数组

1)copyOf()

Arrays.copyOf(dataType[] srcArray,int length);

srcArray 表示要进行复制的数组,length 表示复制后的新数组的长度

2)CopyOfRange()

Array.copyOfRange(dataType[] srcArray,int startIndex,int endIndex);

srcArray 表示原数组,startIndex 表示开始复制的起始索引,endIndex 表示终止索引。(注意:目标数组如果已经存在,将会被重构)

3)arraycopy()

System.arraycopy(dateType[] srcArray,int srcIndex,int destArray,int destIndex,int length)

srcArray 表示原数组,srcIndex 表示源数组中的起始索引,destArray 表示目标数组,destIndex 表示目标数组中的起始索引,length 表示要复制的数组长度。(注意:目标数组必须已经存在,且不会被重构,相当于替换目标数组中的部分元素。srcIndex + length 不能超过原数组长度,destArray + length不能超过目标数组长度)

4)clone()

array_name.clone()

注意:clone方法的返回值是Object类型,要是有强制类型转换为是当的类型。语法格式如下:

int[] targetArray = (int[])sourceArray.clone();

目标数组如果已经存在,将会被重构。

数组排序

Java数组有5种常见的排序方法:

  1. Array.sort()
  2. 冒泡排序
  3. 快速排序
  4. 选择排序
  5. 直接插入

常见问题解答

1.声明数组需要注意什么?

声明数组时,要考虑最大容量。数组一旦被声明,它的容量就固定了,不容改变。若想在运行程序时改变容量,就需要用到集合。

2.数组在平时程序代码种使用是否频繁?

数组有一个缺点,就是一旦声明,就不能改变容量,这个也是其使用频率不高的原因。一般存储数据会使用集合或者Vector来存储数据。

Java不规则数组

Java实际上没有多维数组,只有一维数组。多维数组被解释为是数组的数组,所以会衍生出一种不规则数组。

规则的 4 * 3 二维数组有12个元素,而不规则数组就不一定了。如下代码就初始化了一个不规则数组。

int intArray[][] = {{1,2},{11},{21,22,23},{31,32,33}};

java-7-0

图7-0 不规则数组

动态初始化不规则数组较为麻烦,不能使用new int[4][3]语句,而是先初始化高维数组,然后再分别诸葛初始化地位数组,代码如下:

1
2
3
4
5
6
int intArray[][] = new int[4][]; // 先初始化高维数组
// 逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];

从上述代码初始化完成之后,不是有12个元素而是有9个元素,它们的下标索引如图7-1所示,课件其中下标 [0][2][1][1][1][2] 是不存在的,如果试图访问它们则会抛出下标越界异常。

java-7-1

图7-2 不规则数组访问

Java数组也是一种数据类型

在Java数组中,单个数组内的元素类型是唯一的,由于Java语言是面向对象的语言,而类和类之间可以支持继承关系(从已有的类中派生出新类,新类能吸收已有类的数据属性和行为),这样可能产生一个数组里可以存放多种数据类型的假象。例如有一个水果数组,要求每个数组元素都是水果,实际上数组元素既可以是苹果,也可以是香蕉(苹果、香蕉都继承了水果,都是一种特殊的水果),但这个数组元素的类型还是唯一的,只能是水果类型。

Java的数组既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有的数组元素居于相同的类型即可。

值得注意的是,数组也是一种数据类型,它本身是一种引用类型。例如int是一个基本类型,但int[](这是定义数组的一种方式)就是一种引用类型了。

没错,int[]就是一种数组类型,与int类型、String类型相似,一样可以使用该类型来定义变量,也可以使用该类型进行类型转换等。使用int[]类型来定义变量、进行类型转换时与其它普通类型没有任何区别。int[]类型时一种引用类型,创建int[]类型的对象也就是创建数组,需要使用创建数组的语法。

Java中数组和字符串的相互转换

字符串转换为数组

1)Java String类中的toCahrArray()方法将字符串转换为字符数组,具体代码如下:

1
2
3
4
5
String str = "123abc";
char[] arr = str.toCharArray(); // char数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 输出1 2 3 a b c
}

2)Java.lang包中有String.split()方法,Java中通常用split()分割字符串,返回的是一个数组。

1
2
3
4
5
String str = "123abc";
String[] arr = str.split("");
for (int i = 0; i < arr.length; i++) { // String数组
System.out.print(arr[i]); // 输出 1 2 3 a b c
}

使用 split() 方法注意如下:

  • 如果用“.”或“|”作为分隔的话,必须是如下写法,String.split("\.")String.split("\|"),这样才能正确的分隔开,不能用 String.split(".")String.split("|")
  • 如果在一个字符串中有多个分隔符,可以用“|”作为连字符,如“acount=? and uu =? or n=?”,把三个都分隔出来,可以用 String.split(“and|or”);
  • 如果想在串中使用“”字符,则也需要转义。首先要表达“aaaa\bbbb”这个串就应该用”aaaa\bbbb”,这样分隔才能得到正确结果。

3)如果要返回byte数组就直接使用getBytes方法就可以了。

1
2
String str = "123abc";
byte[] arr = str.getBytes();

4)使用StringUtils中的join函数,使用前需先引入common-lang3的jar包,可去 apache 官网下载,代码如下所示。

1
2
3
4
5
6
7
8
9
10
StringUtils.join(null) = null;
StringUtils.join([]) = "";
StringUtils.join([null])= "";
StringUtils.join(["a", "b", "c"]) = "abc";
StringUtils.join([null, "", "a"]) = "a";
String[] str = { "1", "2", "a", "b" };
// 将数组变成字符串
StringUtils.join(str);
// 将数组用逗号分隔变成字符串
StringUtils.join(str, ",");

数组转换为字符串

1)char字符数组转化为字符串,使用String.copyValueOf(charArray)函数实现,具体代码如下所示:

1
2
3
char[] arr = {'a','b','c'};
String string = String.copyValueOf(arr);
System.out.println(string); // 输出abc

2)String字符串数组转化为字符串,代码如下

1
2
3
4
5
6
7
String[] arr = {"123","abc"};
StringBuffer sb = new StringBuffer();
for(int i = 0;i < arr.length;i++){
sb.append(arr[i]); // String并不拥有append方法,所以借助StringBuffer
}
String sb1 = sb.toString();
System.out.println(sb1); // 输出123abc
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View