Java study notes (6)-Java memory, find array elements

Java memory

Java内存分为 堆内存 栈内存 方法区 || 本地方法栈 寄存器||(不常用)
	栈内存:
		变量开辟空间时常在该空间,变量使用完开辟的空间后会被释放。
		声明变量的过程是在栈内存中申请空间。
		变量不会被默认赋初始值。
		栈内存是用来存储整体数据的地方,比如数组只存储它的地址。一般情况下考虑整体声明的变量都是栈内存。
	堆内存:
		对象存储在堆内存中。
		new关键字处理的变量都存储在堆内存中。
		数组在进行声明时,左边的部分将地址存储在栈内存中,
		右边的部分将数组类型的变量存储在堆内存中。堆内存存储的是该数组变量的地址和下标,通过下标和地址来索引变量的值。
		堆内存中的元素在初始化时都会给定默认值。
		基本数据类型的默认值
			byte int short :0
			long :0L
			float:0.0f
			double:0.0
			char:"\u0000"
			boolean:false
		引用数据类型的默认值
			String 对象数组 类 接口 等其默认值都为 null
	地址:Java中地址用16进制的数来表示。该地址存储在栈内存中。
	**数组的数据变量存储过程可以理解为,给一个数组的某个值赋值时,
	堆内存将数组中的某个位置的地址传到栈内存,栈内存作为一个“新”的变量将值传入该位置,
	依次反复,进行值的改变和传递。**

Find array elements

1.折半查找和二分查找的前提是数组有序。数组有序的方法可以使用冒泡,选择,插入等排序方式。
折半查找,也叫 二分查找 
	指定一个数字,指定一个区间,指定一个区间的中间值mid:
	判断该数字位于该区间的start,mid之间还是mid和end之间,不断迭代mid值,直到查找到该元素。
int[] p = new int[] {
    
    2,4,8,45,58,68};
 //二分查找2
 int mid=0;
 int min = 0;
 int max = p.length;
 mid = (min+max)/2;
 while(min<=max) {
    
    
  if(p[mid]<2) {
    
    
   min = mid;
   mid = (min+max)/2;
  }
  if(p[mid]>2) {
    
    
   min = max;
   mid = (min+max)/2;
  }
 }
2.从两头同时遍历数组,当start<end时程序执行,否则不执行。
int[] p = new int[] {
    
    2,4,8,45,58,68};
 //两头走2
 for (int start = 0,end=p.length-1;start<end; start++,end--) {
    
    
  if(p[start]==2||p[end]==2) {
    
    
   break;
   return i;
  }
 }
  
3.暴力遍历,直接查找
 int[] p = new int[] {
    
    2,4,8,45,58,68};
 //暴力查找2
 for (int i = 0; i < p.length; i++) {
    
    
  if(p[i]==2) {
    
    
   break;
   return i;
  }
 }

Guess you like

Origin blog.csdn.net/qq_42351519/article/details/110873286