数组定义
int[] arr = new int[5]
int[] arr = new int[]{3,5,1,7}
int[] arr = {3,5,1,7}
int arr[][] = new int[2][3]
int [][] arr = new int[2][3]
数组的性质
1. 数组一旦创建,其大小不可变
2. 每个位置只能存储一个值,否则会被覆盖
3. 数组可以装任意类型的数据,但一个数组内存储的必须是相同类型
4. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的变量成员。数组本身就是对象,
Java中对象是在堆中的,因此数组类型无论是保存基本类型还是引用类型,数组对象本省是在堆中的
数组的扩容
int[] arr = new int[]{1, 2, 3}
arr = copyOf(arr, arr.length * 2)
private static int[] copyOf(int[] arr, int newLen) {
int[] newArr = new int[newLen]
for (int i = 0
newArr[i] = arr[i]
}
return newArr
}
冒泡排序
int[] arr = new int[]{5, 6, 9, 13, 3}
for (int i = 0
for (int j = 0
if (arr[j] > arr[j + 1]) {
int temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
二分查找
private static int binarySearch(int[] nums, int target) {
if (null == nums || nums.length == 0) { return -1
int left = 0
int right = nums.length - 1
while (left < right) {
int mid = (left + right) >> 1
if (nums[mid] < target) {
left = mid + 1
} else {
right = mid
}
}
return nums[left] == target ? left : -1
}
有序数组归并排序
public static void mergeArray() {
int[] array1 = {1, 6, 9, 10, 15, 18, 19}
int[] array2 = {20, 25, 30, 36, 40, 45, 78}
int i = 0
int j = 0
int[] newArray = new int[array1.length + array2.length]
/* 当 i 或者 j 小于数组长度的时候继续执行 */
while (i < array1.length || j < array2.length) {
if (i == array1.length) {
newArray[i + j] = array2[j]
j++
continue
}
if (j == array2.length) {
newArray[i + j] = array2[i]
i++
continue
}
/* 当 i 大于 j 把 j 存入新数组,并指向 j 数组的下一位元素 */
if (array1[i] > array2[j]) {
newArray[i + j] = array2[j]
j++
} else {
newArray[i + j] = array1[i]
i++
}
}
}
数组去重
public static void removeDuplicate() {
int[] array1 = {1, 6, 9, 10, 6, 18, 9}
/* 使用HashSet去重,但是去重完数据是无序的 */
HashSet<Integer> set = new HashSet<>()
for (int i = 0
set.add(array1[i])
}
Integer[] arr = set.toArray(new Integer[]{})
Arrays.sort(arr)
/* 不重复特点的链表的哈希集合,有序 */
LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>()
for (int x = 0
linkedHashSet.add(array1[x])
}
Integer[] arr2 = linkedHashSet.toArray(new Integer[]{})
/*利用contains()方法判断该元素是否已经存*/
List<Integer> list = new ArrayList()
for (int x = 0
if (!list.contains(array1[x])) {
list.add(array1[x])
}
}
Integer[] arr3 = list.toArray(new Integer[]{})
}
杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
public static void yangHui() {
int high = 10
int triangle[][] = new int[high][]
for (int i = 0
triangle[i] = new int[i + 1]
triangle[i][0] = 1
triangle[i][i] = 1
if (i > 1) {
for (int j = 1
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]
}
}
}
for (int i = 0
for (int j = 0
System.out.print(" ")
}
for (int j = 0
System.out.printf("%4d", triangle[i][j])
}
System.out.println(" ")
}
}
一维数组内存分析

二维数组内存分析
