目录

一,一维数组

1,一维数组的复制

2,一维数组的排序

 3,一维数组的查找

 4,一维数组的填充

 5,一维数组的比较

 6,一维数组使用方法对数组进行改变

 7,一维数组的冒泡排序

二,二维数组

1,二维数组的声明创建

 2,二维数组的遍历


一,一维数组

数组是一种数据结构,里面存放的是基本类型的数据且长度不可变,数组是有顺序的,因此可以通过一个整型下标来访问数组中的值,而我们数组的遍历不像我们生活中那样从1开始计数,而是从0开始。数组还类似于对象(使用new关键字来进行创建),但是却不是真正的对象,因为数组不能使用clone()方法来对数组进行复制(但是数组有自己的三种复制方式)。接下来让我们来看看一维数组的声明,创建及应用操作。

  1. 声明:数据类型[]  数组名  或者是  数据类型   数组名[](方括号可以放数组类型后也可以放数组名后,关于数组的声明按习惯来使用即可,没有什么影响)
  2. 创建:new  数据类型[]   或者是  {}  亦或者是   new  数据类型[]{}, 创建数组时会对数组进行初始化,初始化可以是动态的,也可以是静态的。由程序员显式的指定数组中的各个数组元素的初始值,而数组的长度由系统来决定的初始化方式即为静态初始化。动态初始化和静态初始化刚刚好相反:程序员不用指定数组的元素,只需要显式的指定数组的长度即可,而由系统来指定数组元素(系统给数组元素赋默认的初始化值)。因为我们的数组里面存放的是基本数据类型的数据,因此里面的默认初始化值也是与这四个基本数据类型相对应的,如下:
  • 整型:0
  • 浮点型:0.0
  • 布尔型:false
  • 引用型:null

1,声明一个int型的一维数组——>int[]    array

2,动态创建一个int型的一维数组(指定其长度为6)——>new  int[6]

3,将声明与创建合在一起——>int[]  array=new int[6];

4,接下来让我们用代码看看它的初始化值是不是0

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义

 5,上面的代码中,使用到了Arrays类中的toString()方法来进行打印数组,在使用类时,我们都是需要导包的,而Arays类位于java.util包下,导入即可。

---因为数组类似于对象,使用的是new来进行创建的,因此普通的打印时打印不出来的如果我们没有使用toString()方法,打印的将是这个下面这种结果

java一维二维数组定义 java一维数组二维数组_java_02

 接下来我们开始学习数组的五个操作:

1,一维数组的复制

---需要考虑数组的大小和数组中的元素

1)普通的复制(通过将源数组的元素赋值给目标数组的数组元素进行复制)

java一维二维数组定义 java一维数组二维数组_java_03

 如上,我们遍历的变量i的范围为原数组的长度(数组长度的获取可以使用length方法,因为length是数组有的属性,就不需要导入其他的类了,直接使用即可),通过上面的for遍历赋值的方法可以进行复制数组,但是,数组也有它原有的两个复制数组的方法。

2)使用System.arraycopy()

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_04

  如上,当我们使用这个System.arraycopy方法时,需要填入五个参数

  • src:要复制的源数组
  • srcPos:要从源数组的哪里开始进行复制(即起始位置)
  • dest:目标数组
  • destPos:目标数组的起始位置
  • length:需要赋值数组元素的个数(因为我们要将数组原封不动的复制,个数一般是源数组的长度)

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_05

3)使用Arrays.copyOf()方法---需要定义一个变量来接收。

java一维二维数组定义 java一维数组二维数组_java_06

 如上,使用此方法需要传入两个参数

  • original:源数组
  • newLength:目标数组的长度

java一维二维数组定义 java一维数组二维数组_数组_07

 从上图我们可以看到,Arrays.copyOf复制的是源数组的长度,里面的数据类型和长度均与源数组一样,但是新数组的数据的值却仍是系统默认指定的初始值。

2,一维数组的排序

1)我们可以使用Arrays类下的sort()或parallelSort()方法来进行排序(排序一般是由小到大进行排序)

java一维二维数组定义 java一维数组二维数组_数组_08

 上面我们使用的是数字的排序,如果我们使用的是字符串来进行排序的话,效果会怎么样呢?

java一维二维数组定义 java一维数组二维数组_数组_09

如上图可知,字符串的排序规则是根据字典编排顺序排序的,例如在ASCII码中大写字母要比小写字母小32。如果我们不想按照字典排序的方式(忽略大小写)的话,我们可以对代码进行如下优化

首先,创建一个类来实现可以让字母大小写转换的接口Comparator:

java一维二维数组定义 java一维数组二维数组_java_10

 因为Comparator是个接口,接口类似类,要想使用它我们需要在程序里面去导入Comparator类。

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_11

 在接口里面的方法都为抽象方法,需要我们去重写,所以这里Lower会爆红,不用担心,我们去重写Comparator里面的抽象方法即可。(有关接口的知识点在Day008,有需要的可以点击查看学习与掌握)类Comparator里面的抽象方法compare---未经修改的代码如下图所示,在这里,我们需要对其修改来完成我们的字符大写转小写的效果。

java一维二维数组定义 java一维数组二维数组_java_12

 进行修改:

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_13

 传入两个String类型的参数,使用相应的方法让它们都小写---这里使用到了toLowerCace()方法,是字符串中比较的一个方法,可以让字母小写,相应的有toUpperCace()方法,让字母都大写。compareTo()方法用于字符串的比较(返回值为Boolean型),如果两个字符串都相等,则返回0,如果左边的字符串的字典排序比右边的大,则返回1,如果左边的比右边的小,则返回-1;

接着将该方法写到parallerSort方法里面,只需要实例化我们创建的Lower类即可调用类里面的实例方法。

java一维二维数组定义 java一维数组二维数组_eclipse_14

package com.array;

import java.util.Arrays;
import java.util.Comparator;

public class TestSort {
	public static void main(String[] args) {
		String[] arraySource= {"a","D","b","A"};
		Lower l=new Lower();
		Arrays.parallelSort(arraySource,new Lower());
//		Arrays.sort(arraySource);
		System.out.println(Arrays.toString(arraySource));
	}
}
class Lower implements Comparator{
	@Override
	public int compare(Object o1, Object o2) {
		String str1=(String)o1;
		String str2=(String)o2;
		return str1.toLowerCase().compareTo(str2.toLowerCase());
	}
}

 3,一维数组的查找

1)我们可以使用for循环语句来遍历数组找到我们想要的那个元素的位置,如下:

java一维二维数组定义 java一维数组二维数组_数组_15

 2)在数组中还有一种拿来查找数组元素的方法---Arrays.binarySearch()方法

该方法的使用有个限制---因为要进行查找的数组必须是事先排序过的,所以这个方法适合于排序后的数组。如果像上面那样的数组(未经过排序)我们去查找的话,就会返回负数

java一维二维数组定义 java一维数组二维数组_一维数组_16

 如上,提示我们需要传入两个参数:

  • a:要查找的数组
  • key:要查找的数组里面的某个元素

java一维二维数组定义 java一维数组二维数组_java_17

 如上,我们的输出结果为负数,解决这种的情况只需要将arraySource数组先排序再查找即可

java一维二维数组定义 java一维数组二维数组_数组_18

 4,一维数组的填充

java的Arrays类中为数组提供了一种用来填充数组的方法,但是这种方法功能有限,只能使用同一个数值进行填充(数组里面的元素都会是一样的)。

java一维二维数组定义 java一维数组二维数组_一维数组_19

 如上,提示我们需要两个参数

  • a:要进行填充的数组
  • val:在数组中填充的元素

java一维二维数组定义 java一维数组二维数组_eclipse_20

 5,一维数组的比较

使用Arrays类下的equals()方法进行两个数组之间的比较。两个相比较的数组元素类型,元素个数和元素所对应的位置都必须相等。

1)数组的数组元素不同时,是不能够相互比较的

java一维二维数组定义 java一维数组二维数组_java_21

 2)当我们的元素类型相同时,我们让数组的元素对应的位置不同。将3和4交换位置。

java一维二维数组定义 java一维数组二维数组_java_22

 3)当元素类型,元素位置相同,但元素个数不同时,其结果也为false

java一维二维数组定义 java一维数组二维数组_eclipse_23

 综上,只有当两个数组的元素类型,元素对应位置和元素个数都相同时,两个数组才相同。

 6,一维数组使用方法对数组进行改变

(在Day004中有方法的讲解)

java一维二维数组定义 java一维数组二维数组_java_24

 7,一维数组的冒泡排序

冒泡排序,相信大家一听这个名字就会在脑海里出现鱼吐泡泡的场景,而在越接近水平面的位置,泡泡越大,学过生物的都知道这是因为水的压强。但是在我们计算机里面,冒泡的原理是两两相比,其中一个元素如果不符合条件的话就得让位给另外一个元素。就好比动物世界里面的兽王一样,如果输了决斗,就得让位,之后只能夹着尾巴生活。前任兽王输了没有地方去,就得先找一个临时的洞穴来藏身,所以在决斗前,兽王都会事先找一个地方作为自己的后路。数组中元素的让位是使用赋值来实现的。让位前的元素得用一个变量来存储,不然就会消失。

冒泡排序需要经过两层循环,如果只是经过一层循环的话,结果就会出现下列的情况:

java一维二维数组定义 java一维数组二维数组_java_25

 大家会发现我们循环使用的是length-1,主要是因为数组是从下标为0的地方开始计数的,最大的值就是length-1。如果我们写的是length,那么就会报如下错误 。告诉我们:我们的数组越界了。

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_26

接下来我们再在最外层加一个for循环,用来继续遍历数组。

java一维二维数组定义 java一维数组二维数组_数组_27

 如上图我们可以看到,在第3*5次的时候数组的顺序就已经排序好了。因此,我们外层for循环的次数可以使用length-2

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_28

 我们做一个假设:是不是每一个冒泡排序的外层循环都可以-2呢?答案是:不可以。所以安全起见还是先写上数组的全长吧。

二,二维数组

二维数组比一维属组多了一层[](方括号),在声明创建,使用及遍历时只是有些微的不同,如下代码:

1,二维数组的声明创建

java一维二维数组定义 java一维数组二维数组_java一维二维数组定义_29

 2,二维数组的遍历

   

java一维二维数组定义 java一维数组二维数组_eclipse_30