快速入门 - Java 一维数组和二维数组详解
数组简介
通常数组是具有连续内存位置的元素的集合。它是一个数据结构,我们存储类似的元素。Java语言中提供的数组是用来存储固定大小的同类型元素,因此只能在Java数组中存储固定的元素集合。
Java中的数组是基于索引的,数组的第一个元素存储的索引为:0。
数组优缺点
Array优点
代码优化:它使代码优化,可以轻松地检索或排序数据。
随机访问:可以获取任何位于任何索引位置的数据。
Array缺点
大小限制:只能在数组中存储固定大小的元素。 它在运行时不会增长其大小。 为了解决这个问题,在Java中使用了集合框架。
Java中的数组类型有两种类型的数组分别是一维数组,多维数组。
一维数组
内存简化结构
- 栈(stack) :存放基本类型的变量数据、局部变量和对象的引用,但对象本身不存放在栈中。
- 堆(heap) :存放由new创建的对象和数组以及对象的实例变量。
- 静态存储区(static storage) :又叫方法区:包含的都是在整个程序中永远唯一的元素,如class,static变量。
- 常量存储区(constant storage) :常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。
- 静态区/静态域(static storage) :随着类的加载而加载并初始化,存在于方法区内存中的字节码文件的静态区域中。
Java中声明一个数组的语法(dataType数据声明类型):
dataType[] arr; (or) // 通用方式,首选
dataType []arr; (or) // 效果相同
dataType arr[]; // 效果相同
在Java中实例化一维数组,语法:
dataType[] arrayRefVar = new datatype[size];
实例:
public class Testarray {
public static void main(String args[]) {
int a[] = new int[5];
a[0] = 10;
a[1] = 20;
a[2] = 70;
a[3] = 40;
a[4] = 50;
for (int i = 0; i < a.length; i++) {
System.out.println("遍历数组值 " + a[i]);
}
}
}
运行结果如下:
遍历数组值 10
遍历数组值 20
遍历数组值 70
遍历数组值 40
遍历数组值 50
数组变量的声明,还可以使用如下的方式创建数组,语法:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
实例:
public class Testarray {
public static void main(String args[]) {
int a[] = {10,20,70,40,50};
for (int i = 0; i < a.length; i++) {
System.out.println("遍历数组值 " + a[i]);
}
}
}
运行结果如下:
遍历数组值 10
遍历数组值 20
遍历数组值 70
遍历数组值 40
遍历数组值 50
多维数组
数据存储在基于行和列的索引(也称为矩阵形式)中,在Java中声明多维数组的语法:
dataType[][] arrayRefVar; (or)
dataType [][]arrayRefVar; (or)
dataType arrayRefVar[][]; (or)
dataType []arrayRefVar[];
在Java中实例化多维数组,语法:
dataType[][] arrayRefVar = new dataType[arraylenght1][arraylenght2];
dataType可以是基本数据类型和复合数据类型,arraylenght1和arraylenght2必须为正整数,arraylenght1为行数,arraylenght2为列数。
实例:
public class Testarray {
public static void main(String args[]) {
String s[][] = new String[2][];
s[0] = new String[3];
s[1] = new String[3];
s[0][0] = new String("素");
s[0][1] = new String("文");
s[0][2] = new String("宅");
s[1][0] = new String("博");
s[1][1] = new String("客");
s[1][2] = new String("!");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(s[i][j]);
}
}
}
}
运行结果如下:
素文宅博客!
java.util.Arrays类
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。具有以下功能:
public static int binarySearch(Object[] a, Object key)
用二分搜索法在给定数组中搜索给定值的对象(Byte,Int,Double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
public static boolean equals(long[] a, long[] a2)
如果两个指定的long型数组彼此相等,则返回true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,Short,Int等)。
public static void fill(int[] a, int val)
将指定的int值分配给指定int型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(byte,short,int等)。
public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(byte,short,int等)。