• bm26 bm27 1


    在这里插入图片描述在这里插入图片描述在这里插入图片描述描述 给定一个二叉树,返回该二叉树层序遍历的结果(从左到右,一层一层地遍历)
    例如:给定的二叉树是{3,9,20,#,#,15,7},

    在这里插入图片描述在这里插入图片描述ArrayDeque
    ArrayDeque是java中对双端队列的线性实现
    在这里插入图片描述在这里插入图片描述在这里插入代码片

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @return int整型ArrayList>
         */
        public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
            // write code here
        ArrayList<ArrayList<Integer>> res=new ArrayList();
        if(root==null){return res;}
        Queue<TreeNode> q=new ArrayDeque<TreeNode>();
        q.add(root);
        while(!q.isEmpty()){
          int n=q.size();
          //补充定义一维数组
          ArrayList<Integer> row=new  ArrayList();
          for(int i=0;i<n;i++){
    TreeNode cur=q.poll();
    row.add(cur.val);
    if(cur.left!=null){
    q.add(cur.left);
    }
    if(cur.right!=null){
        q.add(cur.right);
    }
    
          }res.add(row);
    
    
        }
    
    
        return res;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    head first java 读书笔记
    友好的语法、可移植性、面向对象、内存管理
    java:友好的语法
    友好的语法
    java语法友好
    为什么说java语法友好
    为什么说java语法友好

    Java很容易学习,因为它消除了无用和复杂的特性,如运算符重载、显式指针等。此外,Java有一个类似于C++的语法,而且相对容易,特别是对于有C。它的创建是为了产生一种易于学习、使用、编译和调试的语言,因此Java比其他编程语言简单得多。

    面向对象

    创建类的对象就是创建类的示例。Java是面向对象的,也就是说,它创建每个类的实例,这些实例是类的副本。创建对象的优点是有几个相同代码的例子,并且在不修改主代码的情况下对对象进行修改。

    内存管理
    Java内存管理

    richest_qi
    JDK是支持Java程序开发的最小环境。Java虚拟机,Java类库和Java编程语言,统称为JDK。
    JRE是支持Java程序运行的标准环境。Java虚拟机,Java类库API中的Java SE API子集,统称为JRE。
    我们知道,Java是跨平台语言,“一次编写,到处运行”。
    ————————————————
    版权声明:本文为CSDN博主「richest_qi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qzw752890913/article/details/120722404
    在这里插入图片描述运行时数据区域

    Java程序运行时的内存管理由Java虚拟机负责。 Java虚拟机所管理的内存主要包括以下几个运行时数据区域

    栈(虚拟机栈)
    Java虚拟机执行java方法时,使用的是虚拟机栈。
    每个方法执行时,Java虚拟机都会同步创建一个栈帧。
    栈帧中存储着局部变量表、操作数栈、动态连接、方法出口等信息。
    其中,局部变量表中存放着各种Java基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用。
    ————————————————
    版权声明:本文为CSDN博主「richest_qi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qzw752890913/article/details/120722404

    堆 堆中存放着对象实例。用new创建一个对象,这个对象存储在堆里。 方法区
    方法区中存放着已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
    运行时常量池是方法区的一部分,存放着编译期生成的各种字面量与符号引用。
    直接内存

    直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。
    直接内存是在Java堆外的,直接向系统申请的内存空间。

    总结:内存管理由java虚拟机负责,Java虚拟机执行Java方法时,执行的是虚拟机栈。new的对象存在堆里。

    最棒的跨平台移植性

    即源代码。java文件已经被编译并转换成字节码,字节码可以在任何有Java虚拟机的机器上运行,Java虚拟机将字节码转换成计算机硬件可运行。
    其他大多数编程语言如COBOL、C++、Smalltalk或Visual Basic将大部分代码编译成二进制文件。二进制文件依赖于平台,也就是说,为基于Intel的Windows机器设计的程序不能在基于Linux的机器或MAC上运行。

    总结:Java可移植性:基于Java虚拟机,Java编成字节码,只要有虚拟机,就可以运行

    write-once/run-anywhere
    添加链接描述

    编写一次,到处运行,直观的描述了Java具有强的跨平台能力,Java的跨平台特性与Java虚拟机的存在密不可分,在不同的平台都有相应的JDK,安装好JDK就能给Java提供相应的运行环境,Write once, run anywhere体现在不同的平台都可提供Java运行的环境。
    ————————————————
    版权声明:本文为CSDN博主「Aminokk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_37537818/article/details/105392501

    源代码->编译器->(打代码)、->输出

    编译器会产出字节码,任何支持Java的装置都会把他转成可执行的内容

    ->虚拟机

    通过软件实现,可以读取与执行字节码

    我要做的事

    源代码->编译器

    执行javac程序编译.java文件,如果没错,会产生.class文件,这个文件由字节码组成

    ->输出

    编译成代码.class

    ->java虚拟机
    启动JVM(java虚拟机)运行.class文件,将字节码转换为平台理解的方式来运行

    Java发展

    Java1.02 Java1.1 Java2 Java5.0

    int size = 27;//定义size=27
    String name =Fido;//定义name string类型 =Fido
    Dog myDog = new Dog(name, size);//Dog类实例化一个对象 myDog,有两个属性:name,size
    x = size - 5;//定义x=size-5 :22
    if (x < 15) myDog.bark(8);//如果 x<15 mydog 调用方法bark 传参8
    while (x > 3) {//当 x>3的时候
    myDog.play();//mydog 使用play 方法
    }
    int[] numList = {2,4,6,8}; //定义数组numList:2468
    System.out.print(Hello);//打印 :Hello
    System.out.print(Dog:+ name);//打印:Dog类的姓名
    String num =8;//定义num string类型 =8
    int z = Integer.parseInt(num);//定义z等于
    try {
    readTheFile(“myFile.txt”);
    }//这个应该是读 .txt
    catch(FileNotFoundException ex) {
    System.out.print(File not found.);//如果失败了 打印 file not found
    }
    ```java
    
    ```java
    int size = 27;//声明一个int 类型,名称为size的对象并赋初始值27 
    String name =Fido;//声明名称为 的字符串
    Dog myDog = new Dog(name, size);//以name和size 声明一个名称为为myDog 的Dog变量
    x = size - 5;
    if (x < 15) myDog.bark(8);
    while (x > 3) {
    myDog.play();
    }
    int[] numList = {2,4,6,8};//声明有四个元素的整型数组
    System.out.print(Hello);
    System.out.print(Dog:+ name);//把dog输出到屏幕上,并输出它的名字
    String num =8;
    int z = Integer.parseInt(num);//将字符串8 转换为整型数字8
    try {
    readTheFile(“myFile.txt”);
    }
    catch(FileNotFoundException ex) {
    System.out.print(File not found.);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    temp.offer
    出队
    队列出队
    队列入队
    offer入队ok
    队列定义new LinkedList
    添加链接描述
    java中LinkedList 集合类实现栈和队列

    java集合二之LinkedList

    LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
    LinkedList也和ArrayList一样实现了List接口,但是它执行插入和删除操作时比ArrayList更加高效,因为它是基于链表的。基于链表也决定了它在随机访问方面要比ArrayList逊色一点。

    if(flag)
    c

    如果 flag = 1,那么 if(flag){函数体} 里面的函数体会执行,如果flag = 0 那么大括号里面的函数体就不会执行了

    if(flag) java
    添加链接描述

    你设置的flag=false,在判断语句中一经判断不是真,就直接执行if(!flag){…code…},因为“如果为假”满足已设置的Boolean flag=false;的要求。

    flag=false
    if flag

    添加链接描述

    语句,只有在if()中的boolean为true时,才能执行if()语句下面的{},
    如果为false时,执行else下面{};

    这样能理解
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述ArrayList row
    在这里插入图片描述在这里插入图片描述在这里插入代码片

    import java.util.ArrayList;
    
    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
     TreeNode head=pRoot;
     ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
     if(head==null){return res;}
    Queue<TreeNode> temp=new LinkedList<TreeNode();
    temp.offer(head);
    TreeNode p;
    boolean flag=true;
    while(!temp.isEmpty()){
        int n=temp.size();
        ArrayList<Integer> row=new ArrayList<Integer>();
        flag=!flag;
        for(int i=0;i<n;i++){
            p=temp.poll();
            row.add(p.val);
            if(p.left!=null)
            {temp.offer(p.left);
    
            }
            if(p.right!=null){
                temp.offer(p.right);
            }
        }if(flag){
            Collections.reverse(row);
        res.add(row);
        }
        
    }
     return res;
    
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述

  • 相关阅读:
    LabVIEW软件开发工程师需要具备哪些能力与素质?
    最优化理论-最速下降法的推导与应用
    多个方法多个出路!Microsoft Excel中合并单元格的8种方法
    开发中 — — 异常与日志处理
    【数据结构】十分钟透彻了解各种二叉树的基础概念
    Java 与 Go:数字和字符串的相互转换
    0. HarmonyOS开发环境搭建问题
    Columbus:一个基于API实现的子域名发现服务工具
    Ubuntu部分实用工具安装记录
    IntelliJ IDEA 2023 最新版如何试用?IntelliJ IDEA 2023最新版试用方法及验证ja-netfilter配置成功提示
  • 原文地址:https://blog.csdn.net/czhc1140075663/article/details/127120626