数组是一种非常有用和常用的数据类型,存在于每种程序语言之中,java中的数组是一种最简单的复合数据类型,刚学习java数组的小白们大多都会听到一句这样的话:java是纯面向对象的语言,它的数组也是一个对象。所以很多人就按照一个对象的方式来使用数组,后来你会发现,将数组作为一个类来使用在实现上是多么的“不自然”。下面就来全面了解一下关于java中数组的知识。
什么是数组数组是同一种类型数据的集合,其实就是一个容器。运算的时候有很多数据参与运算,那么首先需要做的是什么。不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器,容器里装的东西就是数组的元素,数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素, 也就是数组一旦定义,那么里边存储的数据类型也就确定了。
数组的特点1.在Java中,无论使用数组或集合,都有边界检查。如果越界操作就会得到一个RuntimeException异常。 2.数组只能保存特定类型。数组可以保存原生数据类型,集合则不能。集合不以具体的类型来处理对象,它们将所有对象都按Object类型处理,集合中存放的是对象的引用而不是对象本身。
3.集合类只能保存对象的引用。而数组既可以创建为直接保存原生数据类型,也可以保存对象的引用。在集合中可以使用包装类(Wrapper Class),如Integer、Double等来实现保存原生数据类型值。
4.对象数组和原生数据类型数组在使用上几乎是相同的;唯一的区别是对象数组保存的是引用,原生数据类型数组保存原生数据类型的值。 int a = 10;
Integer integer = new Integer(a);
int b = integer.intValue();
System.out.println(a = b);
数组的正确使用如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。如何解决这个问题,Java语言提供了数组(array)的数据结构,是一个容器可以存储相同数据类型的元素,可以将100个数存储到数组中。这时候数组就有很大的帮助了~
数组的格式格式一: 元素类型[]数组名 = new元素类型[元素个数或数组长度];
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
格式二: 元素类型[]数组名 = new元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length属性获取数组的大小。
声明数组变量为了使用数组必须在程序中声明数组,并指定数组的元素类型=左半部分:
先写左边明确了元素类型 是int ,容器使用数组,那么如何来标识数组?.那么用一个特殊的符号[]中括号来表示。想要使用数组是需要给数组起一个名字的,那么我们在这里给这个数组起名字为arr .接着跟上等号。
代码体现:
String[] aArray = new String[5];
String[] bArray = {"a","b","c", "d", "e"};
String[] cArray = new String[]{"a","b","c","d","e"};
注意:int arr[] 也是一种创建数组的格式。推荐使用int [] arr 的形式声明数组。
创建数组的三种方式及区别public static void main(String[] args) {
int[] arr1 = {1,2,3};
int[] arr2;
arr2 = new int[]{1,2,3};
int[] arr3;
arr3 = new int[3];
}
他们的区别,方式一:在声明的时候直接就已经分配空间,并赋值,方式一是不能写成如下这种形式的。int[] arr1;
arr1 = {1,2,3};
方式二和方式三,声明和内存分配是分开的,如上面的例子,int[] arr2; 和 int[] arr3;
这一步是在栈空间分配一个引用,存放的是一个引用,nullarr2 = new int[]{1,2,3};<span style="font-family: Arial, Helvetica, sans-serif;">arr3 = new int[3];</span>
到这一步的时候jvm才开始在内存堆区域分配空间,并赋值,方式二直接赋值 1,2,3 方式三 默认初始化,基本类型是 0 布尔类型是 false 引用类型为null, 注:内存一旦分配不能改变,所有说数组长度固定
数组初始化方式一:不使用运算符newint[]arr = { 1, 2, 3, 4, 5 };
方式二:使用运算符newint[] arr2 = new int[] { 1, 2, 3, 4, 5 };
int[] arr3=new int[3];
arr3[0]=1;
arr3[1]=5;
arr3[2]=6;
如果数组初始化中不使用运算符new。需要注意:下列写法是错误的。int[] arr;
arr={1,2,3,4,5};
此时初始化数组,必须将声明,创建,初始化都放在一条语句中个,分开会产生语法错误。 所以只能如下写: int[] arr={1,2,3,4,5};
java.util.ArraysArrays类是一个非常有用数组工具类,里面有很多工具方法,检索、填充、排序、比较、toString()等。
下面给个例子:import java.util.Arrays;
public class TestArrays {
public static void main(String[] args) {
int[] i = new int[10];
Arrays.fill(i, 2);
for (int x : i) {
System.out.print(x + " ");
}
System.out.println("\n" + Arrays.toString(i));
int[] b = new int[12];
System.arraycopy(i, 0, b, 2, 5);
System.out.println(Arrays.toString(b));
int[] c = new int[3];
int[] d = new int[3];
Arrays.fill(c, 3);
Arrays.fill(d, 3);
System.out.println(c.equals(d));
System.out.println(Arrays.equals(c, d));
System.out.println("-------------");
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] a2 = {{1, 2, 3}, {4, 5, 6}};
System.out.println(a1.equals(a2));
System.out.println(Arrays.equals(a1, a2));
System.out.println(Arrays.deepEquals(a1, a2));
System.out.println(Arrays.toString(a1));
System.out.println(Arrays.deepToString(a1));
int[] a3 = {3, 2, 5, 4, 1};
System.out.println(Arrays.toString(a3));
Arrays.sort(a3);
System.out.println(Arrays.toString(a3));
int index1 = Arrays.binarySearch(a3, 4);
int index2 = Arrays.binarySearch(a3, -12);
int index3 = Arrays.binarySearch(a3, 8);
System.out.println(index1 + " " + index2 + " " + index3);
}
}
执行结果:2 2 2 2 2 2 2 2 2 2
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0]
false
true
-------------
false
false
true
[[I@3e25a5, [I@19821f]
[[1, 2, 3], [4, 5, 6]]
[3, 2, 5, 4, 1]
[1, 2, 3, 4, 5]
3 -1 -6
Process finished with exit code 0
数组的遍历public static void main(String[] args) {
int[] x = { 1, 2, 3 };
for (int y = 0; y < 3; y++) {
System.out.println(x[y]);
}
}
数组中有一个属性可以获取到数组中元素的个数,也就是数组的长度.数组名.lengthpublic static void
|
请发表评论