数组是Java语言中最为重要的数据类型之一。数组能够解决不同开发场景下的复杂数据的处理,可以对数据进行快速储存,灵活读取,拥有高效的增删改查,排序的功能。说到这里我们就想到了Python里面的序列了,里面的相关数据类型有元组、字典、集合等,对于Java来说数组操作起来可能的比较的麻烦,但是不要担心,我们一步一步来!
Java 语言中提供的数组是用来存储固定大小的同类型元素
至于什么是数组,我这里就不多说了,数组的构成其实和我们的Python有些相似的,每个键对应每个值。
声明数组变量
dataType[] arrayRefVar;
一般都是数据类型 [] 变量名构成一个数组
如果是多维数组的话,我们就会使用多个中括号来进行定义;在创建数组的时候我们需要指定数组的长度,不然就会无法访问。
注意数组的长度和数组的索引是不一样的,如果数组的长度为5,那么索引应该为0-4,这个是需要注意的。
创建数组
arrayRefVar = new dataType[arraySize];
一、使用 dataType[arraySize] 创建了一个数组。
二、把新创建的数组的引用赋值给变量 arrayRefVar。
dataType[] arrayRefVar = new dataType[arraySize];
也可以通过这样一条语句来完成
例外,创建数组的时候也可以不用表明长度这个用的比较多
// 这里就没有为a这个数组定义它的长度,我们直接在后面定义数组的数据,自动会为我们分配空间!!
int [] a=new int[]{12,1,13,69};
也可以后面直接跟着{}
double[] myList = {1.9, 2.9, 3.4, 3.5};
这个是因为我们用new更加的有利于我们程序的健康,new可以自动回收垃圾,对我们电脑程序运行释放相关内存!!!
package 数组;
public class 数组原理 {
public static void main(String[] args) {
// 数组大小
int size = 10;
// 定义数组
double[] myList = new double[size];
myList[0] = 5.6;
myList[1] = 4.5;
myList[2] = 3.3;
myList[3] = 13.2;
myList[4] = 4.0;
myList[5] = 34.33;
myList[6] = 34.0;
myList[7] = 45.45;
myList[8] = 99.993;
myList[9] = 11123;
// 计算所有元素的总和
double total = 0;
for (int i = 0; i < size; i++) {
total += myList[i];
}
System.out.println("总和为: " + total);
}
}
处理数组
一般处理数组我们用foreach ,和我们Python里面的for循环是差不多的,但是要注意的是foreach里面的条件只能是唯一的,这个也是Java条件循环的一大注意事项。
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
// 计算所有元素的总和
double total = 0;
for (int i = 0; i < myList.length; i++) {
total += myList[i];
}
System.out.println("Total is " + total);
// 查找最大元素
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);
}
}
for(type element: array)
{
System.out.println(element);
}
数组作为函数的参数
数组也可以向方法那样,可以传递参数,进行调用然后再去输出,这样就可以使得程序结构变得更加明显。比如我们看看下面的完整的代码:
package 数组;
public class 数组练习 {
public static void printLn(int [] num) {
for(int i=0;i<num.length;i++) {
// System.out.println(num.length);
// System.out.println(num);
}
for(int x:num){
System.out.println(x);
}
}
public static void main(String[] args) {
printLn(new int[]{12,26,56,96});
}
}
这里我们通过调用之前我们写好的一个方法,我们后面又创建了一个主方法进行调用,就达到了效果,这里我们利用foreach循环实现的,所以我们看看,结果,那么我们想一想,如果我们不去使用这个循环,直接打印那么会出现如何的效果。
这里打印了四个哈希码,我们看不懂得那种!!!!!这个是规则也是语法
数组也可以作为方法(函数)的返回值,我们看看一下的代码
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;
}
上面就是一个倒序的功能程序,下面我们看看它在实际的程序里面是如何起作用的!!!
package 数组;
public class 数组返回值 {
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;
}
public static void main(String[] args) {
int a[]=reverse(new int []{1,2,3,4,6,7,8,9,10});
System.out.println("数组的长度为:"+a.length);
for(int x:a){
System.out.println(x);
}
}
}
我们介绍了这么多的程序了,我们都发现在同一个程序里面不能有多个类,但是可以声明多个public 进行方法调用和编写,这个和我们的Python程序语言结构有异曲同工之妙。
多维数组
多维数组,就像我们线性代数里面的矩阵一样,有多个维数的数据。
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
String str[][] = new String[3][4];
type[][] typeName = new type[typeLength1][typeLength2];
package 数组;
public class 多维数组 {
public static void main(String[] args) {
// 这里是为数组分配空间!
String [][]x=new String[3][3];
int [][]x=new int[1][3];
// x[0]=new String[1];
// x[0]=new String[2];
// 0,1出的数据为“OK!”
String a=x[0][1]=new String("ok!");
System.out.println(a);
}
}
从最高维开始,分别为每一维分配空间,我们可以看做两行的0列的
String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = new String("Good");
s[0][1] = new String("Luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");
s[0]=new String[2] 和 s[1]=new String[3] 是为最高维分配引用空间,也就是为最高维限制其能保存数据的最长的长度,然后再为其每个数组元素单独分配空间 s0=new String(“Good”) 等操作。
Arrays 类
反正我对于多维数组的理解就是我们要变相的把它们看做是一个行列式,[行][列],这样去理解比较的好
数组的常见操作
数组的长度,我们用length来进行操作,你还知道Python里面的长度吗(len)。
如何向数组里面面添加元素,我们利用fill方法。
Arrays.toString的作用
Arrays.toString()的作用是用来很方便地输出数组,而不用一个一个地输出数组中的元素。
这个方法是是用来将数组转换成String类型输出的,入参可以是long,float,double,int,boolean,byte,object
型的数组。
这个就解决我们之前需要利用for循环遍历的方法了!
格式: 首先要导入import java.util.Arrays;
Arrays.toString(数据名))
非常方便!!!!!!!!!!!!!!!!!!!!!
Arrays.fill(intArry,0,3,20);
这个是按照序列进行添加的,从0索引开始到3索引结束,用20填充,其余的用0填充(默认)
数组在创建之后不可以修改长度,就像我们的元组一样,所以我们可以利用一些算法进行修改,但是没有特定的函数来提供修改的权限。
排序
升序排序
Arrays.sort(a);
System.out.println("排序后"+Arrays.toString(a));
和我们的Python是不是一样的
复制
int[] b=Arrays.copyOf(a,8);
System.out.println("复制后"+Arrays.toString(b));
第一个参数是复制的内容,第二个是复制的长度
比较
System.out.println(Arrays.equals(a,b));
比较a b 这两个数组是否是一样的
全部演示代码及效果
package 数组;
import java.util.Arrays;
public class 数组返回值 {
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;
}
public static void main(String[] args) {
int a[]=reverse(new int []{1,2,3,4,6,7,8,9,10});
System.out.println("数组的长度为:"+a.length);
System.out.println(Arrays.toString(a));
// for(int x:a){
// System.out.println(x);
// 升序排序
Arrays.sort(a);
System.out.println("排序后"+Arrays.toString(a));
// 复制
int[] b=Arrays.copyOf(a,8);
System.out.println("复制后"+Arrays.toString(b));
// 比较
System.out.println(Arrays.equals(a,b));
// }
}
}
每文一语
永恒是对的,不变是错误的!