数组
1
2
3
4
5
6
7
8
9
|
1. 数据类型分类: 基本数据类型, 引用数据类型
2. Java 程序在运行时,需要在内存中分配空间, 为了提高运算效率, 又对空间进行了不同区域的划分 因为每一片区域都有特定的处理数据的方式和内存管理方式 共分为五个区域: 栈内存, 堆内存, 方法区, 本地方法区, 寄存器
- 栈内存:用于存储局部变量, 当数据使用完, 所占空间会自动释放;
- 堆内存:
1. 数组和对象,通过 new 建立的实例都存放在堆内存中;
2. 每一个实体都有内存地址值;
3. 实体中的变量都有默认的初始化值
4. 实体不再被使用时, 会在不确定的时间内被垃圾回收器回收
|
数组的定义方式
1
2
3
4
|
1. int[] arr = new int[5]; (推荐写法)
2. int arr[] = new int[5]; (与第一种意义相同)
3. int[] arr = new int[]{1, 2, 3, 4, 5}; (静态初始化方式)
4. int[] arr = {1, 2, 3, 4, 5} (第三种的简化格式)
|
数组排序
选择排序
1
2
3
4
5
6
7
8
9
10
11
|
public void selectSort(int[] arr){
for(int x = 0; x < arr.length-1; x++){
for(int y = x + 1; y < arr.length; y++){
if(arr[x] > arr[y]){
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
|
说明: 选择排序是用当前元素与其他所有元素比较, 如果符合条件,就交换位置
冒泡排序
1
2
3
4
5
6
7
8
9
10
11
12
|
public void bubbleSort(int[] arr){
for(int x = 0; x < arr.length; x ++){
for(int y = 0; y < arr.length - x - 1; y ++){
if(arr[y] > arr[y + 1]){
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}
|
说明: 冒泡排序是用相邻的元素进行比较, 如果符合条件,就交换位置
使用 java.util 包中的 Array.sort(arr); 可以进行排序数组 {#使用-java.util 包中的-array.sortarr-可以进行排序数组}
1
2
3
4
5
|
public void swap(int[] arr, int a, int b){
int temp = arr[a];
arr[b] = arr[a];
arr[b] = temp;
}
|
使用异或方式实现
1
2
3
4
5
|
public void swap1(int arr, int a, int b){
arr[b] = arr[b] ^ arr[a];
arr[a] = arr[b] ^ arr[a];
arr[b] = arr[b] ^ arr[a];
}
|
折半查找
第一种方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public int halfSearch (int[] arr, int key){
int min = 0;
int max = arr.length - 1;
int mid = (min + max)/2;
while(arr[mid] != key){
if(key < arr[mid]){
max = mid - 1;
}else if(key > arr[mid]){
min = mid + 1;
}
mid = (min + max)/2;
}
return mid;
}
|
第二种方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public int halfSearch2(int arr[], int key){
int min = 0;
int max = arr.length;
while(min <= max){
mid = (min + max) >> 1;
if(key > arr[mid]){
min = mid + 1;
}else if(key < arr[mid]){
max = mid -1;
}else{
return mid;
}
return -1;
}
}
|
面试题:将一个数字插入一个有序数组, 插入后,保证数组有序;
- 思路: 通过折半查找, 找到所插入数组的下标,
如果数组中存在与插入值相同的值,则在该元素之前插入
十进制转二进制
1
2
3
4
5
6
7
8
9
|
public void decimalToBinary() {
int num = 8;
StringBuffer sb = new StringBuffer();
while (num > 0) {
sb.append(num % 2);
num = num / 2;
}
System.out.println(sb.reverse());
}
|
十进制转十六进制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public void decimalToHexadecimal() {
int num = 60;
StringBuffer stringBuffer = new StringBuffer();
for (int x = 0; x < 8; x++) {
int temp = num & 15;
if (temp > 9) {
stringBuffer.append((char) (temp - 10 + 'A'));
} else {
stringBuffer.append(temp);
}
num = num >>> 4;
}
System.out.println(stringBuffer.reverse());
}
|
二维数组的定义方法
1
2
3
4
5
|
int[][] array = {{1,2},{34,5,7}};
int[][] array1 = new int[][]{{10,20,30},{40,50},{60}};
short[][] array3 = new short[5][8];
float[][] array4;
array4 = new float[5][5];
|