数组
数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
Java 语言中提供的数组是用来存储固定大小的同类型元素。
你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,…,number99。
数组的声明
dataType[] arrayRefVar; // 首先方法
dataType arrayRefVar[]; // 效果相同,但不是首选方法
实例:
int[] arrayInt; // 首先方法
int arrayInt[]; // 效果相同,但不是首选方法
建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
创建数组:
int[] arrayInt = new int[4];
数组元素赋值:
arrayInt[0] = 0;
arrayInt[1] = 1;
arrayInt[2] = 2;
arrayInt[3] = 3;
数组下标从0开始,到数组长度-1为止。
直接赋值的方式:
int[] arrayInt = {0,1,2,3,4,5};
作业:快速排序、冒泡排序|希尔排序、归并排序
int[] arr = {23, 100, 40, 45, 45, 67, 32, 12, 5, 13, 53, 68};
快速排序: https://www.cnblogs.com/coderising/p/5708801.html
http://blog.csdn.net/Yexiaofen/article/details/78018204
数组的操作
数组的拷贝
System类中包含了一个arraycopy(public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);)方法,该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋值给dest数组的元素。
public class ArrayTest1 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
int[] arr1 = {8, 9, 10, 11, 12, 13};
System.arraycopy(arr, 2, arr1, 2, 3);
for (int i : arr1) {
System.out.printf(i + "\t");
}
}
}
使用Arrays类
打印数组:
public class ArraysTest {
public static void main(String[] args) {
int[] arr = {23, 100, 40, 45, 45, 67, 32, 12, 5, 13, 53, 68};
System.out.println(arr);
System.out.println(Arrays.toString(arr));
}
}
数组的排序
public class ArraysTest {
public static void main(String[] args) {
int[] arr = {23, 100, 40, 45, 45, 67, 32, 12, 5, 13, 53, 68};
System.out.println(arr);
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
输出结果:
[I@1922e15b
[23, 100, 40, 45, 45, 67, 32, 12, 5, 13, 53, 68]
[5, 12, 13, 23, 32, 40, 45, 45, 53, 67, 68, 100]
多维数组
二维数组:数组的数组,二维数组的每一个元素都是一个一维数组
定义格式:
dataType[][] arrayRefVar; // 首选方法
dataType arrayRefVar[][]; // 效果相同,但不是首选方法
int[][] arr4 = new int[][3]; // 错误
二维数组的遍历:
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.printf(“arr2[” + i + “][” + j + "] = " + arr2[i][j] + “\t”);
}
System.out.println();
}
// 二维数组的遍历 加强for循环
for (int[] ints : arr2) {
for (int anInt : ints) {
// 这样遍历不能直接获取到下标
}
}
二维数组的反转—头尾交换
// 二位数组的翻转–头尾交换
for (int start = 0, end = arr2.length - 1; start < end ; start++, end–) {
int[] temp = arr2[start];
arr2[start] = arr2[end];
arr2[end] = temp;
}
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.printf("arr2[" + i + "][" + j + "] = " + arr2[i][j] + "\t");
}
System.out.println();
}
杨辉三角
/*
杨辉三角用二维数组的理解:
arr[i][j] = arr[i -1][j] + arr[i - 1][j - 1]
*/
// 杨辉三角
int row = 5;
int[][] yanghui = new int[row][];
// 遍历二位数组
for (int i = 0; i < row; i++) {
yanghui[i] = new int[i + 1];
// 遍历这个一维数组,添加元素
for (int j = 0; j <= i; j++) {
//每一列的开头和结尾元素为1,开头的时候,j=0,结尾的时候,j=i
if (j == 0 || j == i) {
yanghui[i][j] = 1;
} else {//每一个元素是它上一行的元素和斜对角元素之和
yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
}
System.out.print(yanghui[i][j] + “\t”);
}
System.out.println();
}
作业:
https://www.cnblogs.com/gl-developer/p/6431331.html
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。