Java中的数组基础知识学习教程

时间:2022-08-28 18:45:18

数字

通常情况下,当我们处理数字时,使用原始数据类型,如 byte,int,long,double 等。

示例

?
1
2
3
int i = 5000;
float gpa = 13.65;
byte mask = 0xaf;

然而,在开发中,我们会遇到需要使用对象而不是原始数据类型的情况。为了实现这个, Java 为每个原始数据类型提供包装类。

所有的包装类 (Integer, Long, Byte, Double, Float, Short) 是抽象类 Number 的子类。

Java中的数组基础知识学习教程

这种包装是由编译器处理,这个过程称为装箱。因此,当一个原始数据类型被使用,当需要一个对象时,编译器将原始数据放入其包装类。同样地,编译器也能将对象取出返回到原始数据类型。Number 是 java.lang 包的一部分。

这里是装箱和拆箱的一个例子:

?
1
2
3
4
5
6
7
8
public class Test{
 
  public static void main(String args[]){
   Integer x = 5; // boxes int to an Integer object
   x = x + 10// unboxes the Integer to a int
   System.out.println(x);
  }
}

这将产生以下结果:

 

复制代码 代码如下:
15


当 x 被分配整数值,则编译器将整数放入箱中,因为 x 为整数对象。然后,x 被拆箱,以便它们可以被添加为整数。

 

Number 方法
以下是对 Number 类实现的所有子类中实现的实例方法的列表:

 

SN

方法描述

1

xxxValue()
这个Number对象的值转换为XXX的数据类型并返回

2

compareTo()
把这个Number对象与参数做比较

3

equals()
确定这个数字对象是否等于参数

4

valueOf()
返回一个Integer对象持有指定的原始值

5

toString()
返回表示指定的int或整数的值的String对象

6

parseInt()
此方法用于获取某个字符串的原始数据类型

7

abs()
返回参数的绝对值

8

ceil()
返回的最小整数大于或等于该参数。返回为double

9

floor()
返回的最大整数小于或等于该参数。返回为double

10

rint()
返回的整数,它是最接近值该参数值。返回为double

11

round()
返回最接近的long或者int,通过该方法的返回类型所指参数

12

min()
返回两个参数中较小的

13

max()
返回两个参数中较大的

14

exp()
返回自然对数的底数e,该参数的幂值

15

log()
返回参数的自然对数

16

pow()
返回第一个参数的提高至第二个参数的幂值

17

sqrt()
返回参数的平方根

18

sin()
返回指定的double值的正弦值

19

cos()
返回指定的double值的余弦值

20

tan()
返回指定的double值的正切值

21

asin()
返回指定的double值的反正弦

22

acos()
返回指定的double值的反余弦值

23

atan()
返回指定的double值的反正切值

24

atan2()
将直角坐标(x,y)转换为极坐标(r,θ)并返回θ

25

toDegrees()
将参数转换为度

26

toRadians()
将参数转换为弧度

27

random()
返回一个随机数

 

 


数组
Java 提供了一个数据结构:数组,用于存储相同类型的元素的一个固定大小的连续集合。数组是用于存储数据的集合,但往往将数组认为是相同类型的变量的集合。

跟声明单个变量相反,如 number0, number1, ... number99, 声明一个数组变量,如数字和使用 numbers[0], numbers[1] ..., numbers[99] 来表示各个变量。

此次教程将介绍如何使用索引变量声明数组变量,创建数组,并处理数组。

声明数组变量
要使用一个程序的数组,必须声明一个变量来引用数组,必须指定数组的变量可以引用的类型。下面是来声明一个数组变量的语法:

?
1
dataType[] arrayRefVar;  // preferred way.

or

?
1
dataType arrayRefVar[]; // works but not preferred way.

注 风格 dataType[] arrayRefVar 是首选的。风格 dataType arrayRefVar[] 来自于 C/C++ 语言, 方便Java 继承 C/C++ 的编程风格。

示例

下面的代码片段是这种语法的例子:

?
1
double[] myList;     // preferred way.

or

?
1
double myList[];     // works but not preferred way.

创建数组
可以通过使用 new 运算符使用以下语法创建一个数组:

?
1
arrayRefVar = new dataType[arraySize];

上面的语句做了两件事:

  • 它创建了一个使用 new dataType[arraySize] 的数组;

  • 它将新创建的数组引用分配给变量 arrayRefVar。

声明数组变量,建立一个数组,并分配给变量数组引用可以在一个语句中组合使用,如下所示:

?
1
dataType[] arrayRefVar = new dataType[arraySize];

另外,可以创建数组,如下所示:

?
1
dataType[] arrayRefVar = {value0, value1, ..., valuek};

数组元素通过索引访问。数组的下标是从0开始的,也就是说,它们从0开始到 arrayRefVar.length-1。

示例

下面的语句声明一个数组变量 myList,创建 double 类型的10个元素的数组,并把它的引用分配到 myList :

?
1
double[] myList = new double[10];

以下图片代表数组 myList。在这里,myList 有10个 double 值,索引是从0到9。

Java中的数组基础知识学习教程

处理数组
当处理数组元素时,经常使用的是 loop 循环或 foreach 循环,因为一个数组中所有的元素是相同类型的并且数组的大小是已知的。

示例

下面是一个演示如何创建,初始化和处理数组的完整例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class TestArray {
 
  public static void main(String[] args) {
   double[] myList = {1.9, 2.9, 3.4, 3.5};
 
   // Print all the array elements
   for (int i = 0; i < myList.length; i++) {
     System.out.println(myList[i] + " ");
   }
   // Summing all elements
   double total = 0;
   for (int i = 0; i < myList.length; i++) {
     total += myList[i];
   }
   System.out.println("Total is " + total);
   // Finding the largest element
   double max = myList[0];
   for (int i = 1; i < myList.length; i++) {
     if (myList[i] > max) max = myList[i];
   }
   System.out.println("Max is " + max);
  }
}

这将产生以下结果:

?
1
2
3
4
5
6
1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

foreach 循环
JDK 1.5 引入了一个新的 for 循环被称为 foreach 循环或增强的 for 循环,它无需使用一个索引变量来完整的遍历数组。

示例

下面的代码显示数组 myList 中的所有元素:

?
1
2
3
4
5
6
7
8
9
10
11
public class TestArray {
 
  public static void main(String[] args) {
   double[] myList = {1.9, 2.9, 3.4, 3.5};
 
   // Print all the array elements
   for (double element: myList) {
     System.out.println(element);
   }
  }
}

这将产生以下结果:

?
1
2
3
4
1.9
2.9
3.4
3.5

将数组传递给方法
正如传递基本类型值的方法,也可以将数组传递给方法。例如,下面的方法显示在一个 int 数组中的元素:

?
1
2
3
4
5
public static void printArray(int[] array) {
 for (int i = 0; i < array.length; i++) {
  System.out.print(array[i] + " ");
 }
}

你可以通过传递数组调用它。例如,下面的语句调用方法 PrintArray 显示3,1,2,6,4,2:

?
1
printArray(new int[]{3, 1, 2, 6, 4, 2});

从一个方法返回一个数组
一个方法也可以返回一个数组。例如,下面所示的方法返回一个数组,它是另一个数组的反转:

?
1
2
3
4
5
6
7
8
public static int[] reverse(int[] list) {
 int[] result = new int[list.length];
 
 for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
  result[j] = list[i];
 }
 return result;
}

Arrays 类
java.util.Arrays 中的类包含各种静态方法用于排序和搜索数组、数组的比较和填充数组元素。这些方法为所有基本类型所重载。

SN

方法和描述

1

public static int binarySearch (Object[] a, Object key)
使用二进制搜索算法搜索对象的指定数组(字节,整数,双精度等)来指定值。该数组必须在进行此调用之前进行分类。如果它被包含在列表 (-(insertion point + 1), 将返回索引搜索关键字。

2

public static boolean equals (long[] a, long[] a2)
如果多头的两个指定数组彼此相等返回true。两个数组认为是相等判定方法:如果两个数组包含相同的元素数目,并在两个数组元素的所有相应对相等。如果两个数组相等,返回true。同样的方法可以用于所有其它的原始数据类型 (Byte, short, Int, etc.)

3

public static void fill(int[] a, int val)
将指定的int值到指定的int型数组中的每个元素。同样的方法可以用于所有其它的原始数据类型(Byte, short, Int etc.)

4

public static void sort(Object[] a)
将对象指定的数组升序排列,根据其元素的自然顺序。同样的方法可以用于所有其它的原始数据类型( Byte, short, Int, etc.)