数组的基本概念和操作

1.数组的基本概念

1.基本概念

(1)数组是java中一种最基本的数据结构,是一种线性的连续存储空间的数据结构,同时也是所有数据结构中访问速度最快的一种。它就相当于是一个容器,是存储同一类型的数据的集合。关于数据类型,在java里面有两种。一种是基本数据类型,基本数据类型(byte、short、int、long、float、double、char、boolean)。另一种是引用数据类型(所有用class定义类都是引用类型)
(2)数组在Java中是类,类肯定有属性和方法,而数组自身只有一个唯一的属性,即获取数组能存储多少数据的属性:length。但是有从Object父类继承过来的属性和方法。
而每一个实例化数组都是对象,数组名都是属于引用数据类型。它们表示的都是它们的地址。数组名表示的地址指向该数组的首个元素的存储位置。在内存中,数组中的元素按顺序地、相邻排布。

(3)因为Object是Java中所有类的父类,而所有的基本数据类型,都由一个对应的封装类,封装类是Object的子类。所以如果定义的数组的类型是Object,则所有数据类型的数据都可以存储。

2.使用注意事项:

(1)数组的长度是固定的,所以数组在定义的时候是要给指定的长度的。
我们可以在一开始就定义这个数组并给定长度。这时有以下几种方式:

int [] array1 = { 5.4, 24, -53.98 }; //第一种方式:数据类型[] 数组名 = {值,...};
Double[] array2 = new Double[] { 5.4, 24, -53.98 };
/*第二种方式:数据类型[] 数组名 = new 数据类型[]{值,...};    其实第二种方式和
第一种方式一样,不过用这种方式定义时可以省略“new 数据类型”这一部分*/
Object[] array3 = new Object[12];//第三种方式:数据类型[] 数组名 = new 数据类型[长度];

或者我们也可以先定义一个数据,在实例化对象的时候给定长度:

char [] array4 ; // 数据类型[] 数组名;
double[] array5;

在后面用的时候再实例化:

array4 = new char[66];                 数组名 = new 数据类型[长度];
array5 = new double{2.0,3.4,5,6}		        数组名 = new 数据类型[]{值,...};

(2)多维数组的定义与一维数组类似,也有上述几种方法。
一维数组中要获得数组的长度,可以通过 数组名.length得到
二维数组中 ,可以通过数组名.length得到二维数组有多少行
通过数组名.[行下标].length获取二维数组中某一行有多少列

2.数组的处理

1.数组的随机产生:要对数组进行遍历和排序,首先我们要有一个数组,这个数组除了我们一开始定义好之外,在Java中我们还可以随机产生一个数组。看下面代码:

import java.util.Random;
import java.util.Scanner;

public class ArraySort {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);// 创建读取命令行数据的对象
		System.out.println("请输入二维数组的行数:");
		int row = sc.nextInt();//调用方法存储在命令行输入的数据
		System.out.println("请输入二维数组的列数:");
		int column = sc.nextInt();
		int[][] array = crateArray(row, column);//调用随机产生二维数组的方法
		printArray(array);
	}
	
	/**
	 * 产生随机数列的方法
	 */

	private static int[][] crateArray(int row, int column) {
		int[][] array = new int[row][column];// 创建数组对象,array数组每一个位置的值0
		Random rand = new Random();  //// 创建Random随机数对象
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				array[i][j] = rand.nextInt(99)+1;//调用产生随机数的方法
			}
		}
		return array;
	}
/**
 * 打印产生的数组
 */
	private static void printArray(int[][] array) {
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}	
	}	
}

通过上述代码就能随机产生一个指定行和列的数组出来,例如上述的代码运行结果:
在这里插入图片描述
其实在上面的代码中就已经包含了数组的遍历,下面我们来将随机产生的二维数组进行排序:

/**
	 * 对数组的每一行进行冒泡排序
	 */
	public static int[][] maopao(int[][] array1) {
		for (int r = 0; r < array1.length; ++r) {
			for (int i = 0; i < array1[r].length; ++i) {
				for (int j = i + 1; j < array1[r].length; ++j) {
					if (array1[r][i] > array1[r][j]) {
						int temp = array1[r][i];
						array1[r][i] = array1[r][j];
						array1[r][j] = temp;
					}
				}
			}
		}
		return array1;
	}

最后分享一下随机产生数组并排序输出的代码:

import java.util.Random;
import java.util.Scanner;

public class ArraySort {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);// 创建读取命令行数据的对象
		System.out.println("请输入二维数组的行数:");
		int row = sc.nextInt();// 调用方法存储在命令行输入的数据
		System.out.println("请输入二维数组的列数:");
		int column = sc.nextInt();
		int[][] array = crateArray(row, column);// 调用随机产生二维数组的方法
		System.out.println("排序之前的数组:");
		printArray(array);
		System.out.println("排序之后的数组:");
		maopao(array);
		printArray(array);
		System.out.println("请输入字符的个数:");
		int g = sc.nextInt();
		char[] zifu = cratecharArray(g);
		printzifu(zifu);
		sortzhimu(zifu);

		printzifu(zifu);
	}

	/**
	 * 产生随机数列的方法
	 */

	private static int[][] crateArray(int row, int column) {
		int[][] array = new int[row][column];// 创建数组对象,array数组每一个位置的值0
		Random rand = new Random(); // // 创建Random随机数对象
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				array[i][j] = rand.nextInt(99) + 1;// 调用产生随机数的方法
			}
		}
		return array;
	}

	/**
	 * 打印产生的数组
	 */
	private static void printArray(int[][] array) {
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}

	}

	/**
	 * 对数组的每一行进行冒泡排序
	 */
	public static int[][] maopao(int[][] array1) {
		for (int r = 0; r < array1.length; ++r) {
			for (int i = 0; i < array1[r].length; ++i) {
				for (int j = i + 1; j < array1[r].length; ++j) {
					if (array1[r][i] > array1[r][j]) {
						int temp = array1[r][i];
						array1[r][i] = array1[r][j];
						array1[r][j] = temp;
					}

				}
			}
		}
		return array1;
	}

	/**
	 * 产生随机的26个大写字母方法
	 */

	private static char[] cratecharArray(int length) {
		char[] array2 = new char[length];
		Random rand = new Random();
		for (int i = 0; i < array2.length; i++) {
			array2[i] = (char) (rand.nextInt(26) + 65);// 调用产生随机数的方法,并强制转型为char类型
		}
		return array2;
	}

	/**
	 * 对字符进行排序
	 */
	public static char[] sortzhimu(char[] zhimu) {
		for (int i = 0; i < zhimu.length - 1; i++) {
			for (int j = i + 1; j < zhimu.length; j++) {
				if ((zhimu[i]) > (zhimu[j])) {// 字符串的比较大小
					char temp = zhimu[i];
					zhimu[i] = zhimu[j];
					zhimu[j] = temp;
				}
			}
		}
		return zhimu;
	}
/**
 * 输出字符
 */
	public static void printzifu(char[] array) {
		for (int i = 0; i < array.length; ++i) {
			System.out.print(array[i] + "\t");
		}
		System.out.println("");
	}

}

代码运行结果:
排序结果

猜你喜欢

转载自blog.csdn.net/weixin_44307764/article/details/86659569