赞
踩
jvm在运行java应用程序过程中,会把它所管理的内存划分为若干不同的数据区域。
为什么要有堆和栈?这样设计有什么好处?
1. Java自动管理堆和栈,程序员不能直接地设置栈和堆。
2. Java的堆是一个运行时数据区。堆是由JVM的垃圾回收器自动管理的。堆的优势是可以在程序运行时,动态地分配内存大小,但是正是由于这个原因,它的存取速度较慢。
3. 栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小和生存期是必须确定的,缺乏灵活性。
4. 栈有一个很重要的特性,就是存在栈中的数据可以共享。
栈:每一个方法被执行的时候,都会在栈区创建一块空间
栈的特点:先进后出
方法被调用直至执行完毕的过程,对应入栈到出栈的过程
栈是由系统自动分配,速度快,栈式一个连续的内存空间
堆:堆用于存储创建好的对象和数组(数组也是对象)
堆是一个不连续的内存空间,分配灵活,速度慢
- public class Demo1 {
-
- public static void main(String[] args) {
- int[] arr = {53,67,34,6,724,8,0};
- //1. 写循环
- for (int i = 0; i < arr.length/2 ; i++) { //交换的次数 i表示目前是第几轮
- //2. 交换 arr[i] arr[6-i]
- int c = arr[i];
- arr[i] = arr[6-i];
- arr[6-i] = c;
- }
- //验证 遍历 输出fori
- for (int i = 0; i <arr.length ; i++) {
- System.out.println(arr[i]);
- }
- //foreach循环遍历iter for(数据类型 变量名 : 数组名)
- for(int number : arr){
- //循环次数根据arr数组的长度,每次循环把当前数组中的数据赋值给number
- System.out.println(number);
- }
- }
- }
- public class Demo2 {
-
- public static void main(String[] args) {
- int[] arr = {53,67,34,6,724,8,0,60};//length = 8
- //循环里:交换
- for(int i =0;i< arr.length-1 ;i++){//外循环 经过几轮排序 7轮 完全排好
- //每一轮内部又是循环比较 相邻的数 比较7
- for (int j = 0; j < arr.length-1-i; j++) {
- //从小到大:什么情况才需要交换 前面的数 > 后面的数 才交换位置
- //从大到小: 前面的数 < 后面的数
- if( arr[j] < arr[j+1]){
- // //交换相邻的数 arr[j] arr[j+1]
- int temp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = temp;
- }
- }
- }
- //验证
- for (int i : arr) {
- System.out.println(i);
- }
-
- }
- }
- public class Arrays_Demo3 {
- public static void main(String[] args) {
- int[] arr = {53,67,34,6,724,8,0,60};
- //排序sort
- Arrays.sort(arr);//sort底层代码实现,一个一个比较,交换
-
- for (int i : arr) {
- System.out.println(i);
- }
-
- //复制copyOf
- String[] arrA = {"张三","李四","王五"};
- String[] arrB = new String[3];
- //返回值 用一个新数组来接收
- arrB = Arrays.copyOf(arrA,2);//第一个参数:原数据,第二个参数:拷贝长度
-
- for (String s : arrB) {
- System.out.println(s);
- }
-
-
- //查找binarySearch ---必须先排序
- int[] arrC = {53,67,34,6,724,8,0,60};
- Arrays.sort(arrC);//查找的前提需要 一组排好序的数据
- int weizhi = Arrays.binarySearch(arrC,67);
- System.out.println("下标:"+weizhi);
-
- //转换成字符串 toString()
- String str = Arrays.toString(arrC);
- System.out.println(str);
-
- //填充fill
- //Arrays.fill(arrC,0); 全部填充
- //填充前3
- Arrays.fill(arrC,2,6,9);//含头不含尾
- str = Arrays.toString(arrC);
- System.out.println(str);
-
-
-
-
- }
- }
- public class Arrays_Demo4 {
- public class Arrays_Demo3 {
- public static void main(String[] args) {
- int[] arr = {53,67,34,6,724,8,0,60};
- //排序sort
- Arrays.sort(arr);//sort底层代码实现,一个一个比较,交换
-
- for (int i : arr) {
- System.out.println(i);
- }
-
- //复制copyOf
- String[] arrA = {"张三","李四","王五"};
- String[] arrB = new String[3];
- //返回值 用一个新数组来接收
- arrB = Arrays.copyOf(arrA,2);//第一个参数:原数据,第二个参数:拷贝长度
-
- for (String s : arrB) {
- System.out.println(s);
- }
-
-
- //查找binarySearch ---必须先排序
- int[] arrC = {53,67,34,6,724,8,0,60};
- Arrays.sort(arrC);//查找的前提需要 一组排好序的数据
- int weizhi = Arrays.binarySearch(arrC,67);
- System.out.println("下标:"+weizhi);
-
- //转换成字符串 toString()
- String str = Arrays.toString(arrC);
- System.out.println(str);
-
- //填充fill
- //Arrays.fill(arrC,0); 全部填充
- //填充前3
- Arrays.fill(arrC,2,6,9);//含头不含尾
- str = Arrays.toString(arrC);
- System.out.println(str);
-
-
-
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。