目录
数组
默认初始化值
char:虽然是字符型,但是初始化值为数值0('\u0000'),不是字符'0'
boolean:false
引用数据类型:null
int:0
float,double:0.0
数组在内存中的存储
虚拟机栈:存储正在执行的Java方法的局部变量表
堆:引用数据类型的对象,用new的都在这
方法去:被虚拟机加载类的信息,常量,静态方法,即时编译后的代码
程序计数器:每个线程下一条指令的地址
一维数组在内存的存储
public static void main(String[] args) {
int[] arr1=new int[4];
arr1[0]=0;
arr1[1]=1;
String [] strings=new String[4];
strings[0]="Tom";
strings[1]="张三";
}
初始化时候要确定好"容量",然后赋值为默认数据类型
main() arr1:0Xaabb arr2:0Xacbc | 0Xaabb
0Xacbc
| ||||||||
栈 | 堆 |
二维数组在内存中的存储
public static void main(String[] args) {
int[][] arr1=new int[4][4];
arr1[0][0]=0;
arr1[0][1]=1;
String [][] strings=new String[4][];
strings[0]=new String[4];
strings[0][1]="张三";
}
两种情况:
1;动态初始化1:int [ ] [ ] arr=new int [3][4];
外层默认存储地址
内层存储一个一维数组
2:动态初始化2:int [ ] [ ] arr=new int [3][ ];
未曾元素为null,指针无指向
内层调用时产生空指针异常(nullPointerException)
main()
arr2:0Xacaa | 0Xmnss:
0x1234:
| ||||||||||||||||
栈 | 堆 |
数组算法
冒泡排序:
从第一个元素开始,把元素1,2比较,较大的放到2的位置;2,3比较,较大的放到3.....最后一个元素就是最大的元素,然后循环,将剩下的数组继续进行冒泡
public class Java07数组_maopaopaixv {
public static void main(String[] args) {
int[] num={1,3,5,2,4};
for (int j=0;j< num.length;j++){
for (int i=0;i< num.length-j-1;i++){
if (num[i]>num[i+1]){
int temp=num[i];
num[i]=num[i+1];
num[i+1]=temp;
}
}
}
for (int i=0;i< num.length;i++) {
System.out.println(num[i]);
}
}
}
选择排序:
标记最大的元素为第一个元素,将他与后面的元素进行比较,后面的更大就赋值更新MAX,到最后再与最后一个位置的元素交换位置,只需要进行最后一次交换
public class Java07数组_xvanzepaixv {
public static void main(String[] args) {
int[] num={1,3,5,2,4};
for (int j=0;j< num.length;j++) {
int max = 0;
for (int i = 0; i < num.length-j; i++) {
if (num[max] < num[i]) max = i;
}
int temp = num[num.length-1-j];
num[num.length-1-j] = num[max];
num[max] = temp;
}
for (int i=0;i< num.length;i++) {
System.out.println(num[i]);
}
}
}
二分查找:
用于已经排好顺序的数组,找到数组中间的数字,与待查找数组比较大小,小于待查找数字说明在后一半,大于说明在前一半,等于即找到,如果标记的star和end相遇则说明数组里没有要找的元素
public class Java07数组_erfenchahzao {
public static void main(String[] args) {
int[] num={1,2,3,4,5,6,7,8,9};
int a=8;//待查找元素
int star=0,end= num.length-1,mid=(star+end)/2;//待查找部分数组的开始位次、结束位次、中间
while(true){
if (num[mid]>a){
end=mid;
mid=(star+end)/2;
}
if (num[mid]<a){
star=mid;
mid=(star+end)/2;
}
if (num[mid]==a){
System.out.println(mid);
break;
}
}
}
}