美文网首页Java基础
Java基础——易考而不易答的Java题

Java基础——易考而不易答的Java题

作者: 莫问以 | 来源:发表于2018-10-12 10:42 被阅读12次

    1、 问题:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

    • switch可作用于char byte short int
    • switch可作用于char byte short int对应的包装类
    • switch不可作用于long double float boolean,包括他们的包装类
    • switch中可以是字符串类型,String(jdk1.7之后才可以作用在string上)
    • switch中可以是枚举类型


      switch不可作用于long double float boolean,包括他们的包装类.png

      switch中可以是字符串类型:

    package com.guxf.demo.domain;
    /*
     * switch中可以是字符串类型
     *  String(jdk1.7之后才可以作用在string上)
     */
    public class TestSwitchString {
    
        public static void main(String[] args) {
            int season = 0;
            String strSeason = "Summer";
            switch (strSeason.toLowerCase()) {
            case "spring":
                season = 1;
                break;
            case "summer":
                season = 2;
                break;
            default:
                season = -1; // 没找到对应的季节
                break;
            }
            System.out.println(strSeason + "-->" + season);
        }
    }
    

    switch中可以是1.5枚举类型:

    package com.guxf.demo.domain;
    /*
     * switch中可以是1.5枚举类型
     */
    //枚举三个量
    enum Signal{
        GREEN,YELLOW,RED;
    }
    public class TestSwitchSingal {
        public static void main(String[] args) {
            Signal color = Signal.RED;
            
            switch (color) {
            case RED:
                color = Signal.YELLOW;
                break;
            case YELLOW:
                color = Signal.RED;
            case GREEN:
                color = Signal.YELLOW;
            default:
                System.out.println("什么鬼灯");
                break;
            }   
            System.out.println("color:"+color);
        }
    }
    

    2、问题:下面程序的答案

    package com.guxf.demo.domain;
    /*
     * 深入理解String
     */
    public class StringEqualTest {
    
        public static void main(String[] args) {
            String s1 = "KunMing";
            String s2 = new String("KunMing");
            String s3 = "Kun";
            String s4 = "Ming";
            String s5 = "Kun" + "Ming";
            String s6 = s3 + s4;
            System.out.println(s1 == s2);   //false
            System.out.println(s1 == s5);   //true
            System.out.println(s1 == s6); //false
            System.out.println(s1 == s6.intern()); //true
            System.out.println(s2 == s2.intern()); //false
        }
    }
    

    PS:理解String类和StringBuilder以及StringBuffer

    3、问题:Integer f=180; Integer g=180; f==g是True还是False?

    public class TestInteger {
    
        public static void main(String[] args) {
            Integer f1=100,f2=100,f3=180,f4=180;
            System.out.println(f1==f2); //true
            System.out.println(f3==f4); //false 
        }   
    }
    

    PS:如果整型字面量的值在-128 到 127 之间,那么不会 new 新的 Integer 对象,而是直接引用常量池中的 Integer 对象,所以上面的面试题中 f1==f2 的结果是 true,而 f3==f4 的结果是 false

    4、栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是(B)
    A.2 3 4 1 5
    B.5 4 1 3 2
    C.2 3 1 4 5
    D.1 5 4 3 2
    1和2进栈,2出栈,3进栈,3出栈,4进栈,4出栈,1再出栈,5进栈,5出栈--A对
    1和2进栈,2出栈,3进栈,3出栈,1出栈,4进栈,4出栈,5进栈,5出栈--C对
    1进栈,1出栈,2345进栈,然后5432出栈--D对
    B错误,因为5要想出来,就必须五个数都要进栈,那么出来就一种结果是54321,答案是54132所以不对
    PS:本题要掌握栈的相关知识,参考:https://www.cnblogs.com/fzz9/p/8167546.html

    5、不同级别的用户对同一对象拥有不同的访问权利或某个客户端不能直接操作到某个对象, 但又必须和那个对象有所互动,这种情况最好使用什么设计模式?( D)
    A. Bridge 模式
    B. Factory模式
    C. Adapter 模式
    D. Proxy 模式

    6、HashSet里的元素是不能重复的,那用什么方法来区分重复与否?
    当往集合在添加元素时,调用 add(Object)方法时候,首先会调用 Object 的 hashCode()方法判hashCode 是否已经存在,如不存在则直接插入元素;
    如果已存在则调用 Object 对象的 equals()方法判断是否返回 true,如果为 true 则说明元素已经存在,如为false则插入元素。

    7、List,Set,Map是否继承自Collection接口?存取元素时有何差异?
    List,Set是继承Collection接口,Map不是。
    List:元素有放入顺序,元素可重复,通过下标来存取和值来存取
    Map:元素按键值对存取,无放入顺序
    Set:元素无存取顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在 set 中的位置是由该元素的HashCode 决定的,其位置其实是固定的)

    8、已知一棵二叉树,如果先序遍历的节点顺序是ADCEFGHB,中序遍历是CDFEGHAB,则后序遍历结果为:( D )
    A. CFHGEBDA
    B. CDFEGHBA
    C. FGHCDEBA
    D. CFHGEDBA

    对于二叉树的遍历方式一般分为先序、中序、后序三种方式:
    先序遍历(根左右)——若二叉树为空,则不进行任何操作:否则
    1、访问根结点。
    2、先序方式遍历左子树。
    3、先序遍历右子树。
    中序遍历 (左根右)——若二叉树为空,则不进行任何操作:否则
    1、中序遍历左子树。
    2、访问根结点。
    3、中序遍历右子树。
    后序遍历 (左右根)——若二叉树为空,则不进行任何操作:否则
    1、后序遍历左子树。
    2、后序遍历右子树。
    3、放问根结点。
    因此,根据题目给出的先序遍历和中序遍历,可以画出二叉树:


    二叉树.png

    9、初始序列为 1 8 6 2 5 4 7 3 一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:( A )
    A. 8 3 2 5 1 6 4 7
    B. 3 2 8 5 1 4 6 7
    C. 3 8 2 5 1 6 7 4
    D. 8 2 3 5 1 4 7 6
    初始化序列:1 8 6 2 5 4 7 3,小根堆就是要求结点的值小于其左右孩子结点的值,左右孩子的大小没有关系,那么小根堆排序之后为:1 2 4 3 5 6 7 8;


    小根堆排序.jpg

    中序遍历:左根右,故遍历结果为:8 3 2 5 1 6 4 7
    故最后选择的结果: A

    相关文章

      网友评论

        本文标题:Java基础——易考而不易答的Java题

        本文链接:https://www.haomeiwen.com/subject/xzoogftx.html