1.数组的定义
(1)一维数组
String[] age = new String[3]; //推荐使用这中
String[] name = {"xiaojng","laowang"};
String[] lan = new String[]{"C","Java"};
数组属于引用类型,数组型数据是对象,存放在堆中,存放在堆中的数据默认是有初始化的:
- int[]默认初始化为0
- float[]和double[]---->0.0
- char[]---->"\u0000"或0
- boolean[]----->false
- 引用数据类型(string、对象、接口)—>null
内存地址分配:
(2)二维数组
int[][] arr = new int[3][2];//3行2列
int[][] arr = new int[3][];//二维数组中有3个一数组
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
int[][] arr = new int[][]{
{
3,8,2},{
2,7},{
9,0,1,6}};
或
int[][] arr = {
{
3,8,2},{
2,7},{
9,0,1,6}};
内存地址分配:
2.Arrays工具类的使用
java.util.Arrays类包含了用来操作数组的各种方法:
注意:
sort()方法的实现是快速排序。
binarySearch()二分法查找,数组必须是有序的。
System.arraycopy():array的复制。
3.数组使用中的常见异常
4.数组中涉及到的常见的算法
(1)二分法查找(有序数组)
(2)数组元素的排序
排序选择:
常用排序:
冒泡排序:
public static void bubbleSort(int[] data) {
int arrayLength = data.length;
for (int i = 0; i < arrayLength - 1; i++) {
for (int j = 0; j < arrayLength - 1 - i; j++) {
if(data[j] > data[j + 1]){
int temp = data[j + 1];
data[j + 1] = data[j];
data[j] = temp;
flag = true;
}
}
}
}
选择排序:
public static void selectSort(int[] data) {
int arrayLength = data.length;
for (int i = 0; i < arrayLength - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arrayLength; j++) {
if (data[minIndex] - data[j] > 0) {
minIndex = j;
}
}
if(minIndex != i){
int temp = data[i];
data[i] = data[minIndex];
data[minIndex] = temp;
}
}
}
快速排序:
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
private static void subSort(int[] data, int start, int end) {
if (start < end) {
int base = data[start];
int i = start;
int j = end + 1;
while (true) {
while (i < end && data[++i] - base <= 0)
;
while (j > start && data[--j] - base >= 0)
;
if (i < j) {
swap(data, i, j);
} else {
break;
}
}
swap(data, start, j);
subSort(data, start, j - 1);//递归调用
subSort(data, j + 1, end);
}
}
public static void quickSort(int[] data){
subSort(data,0,data.length-1);
}