zoukankan      html  css  js  c++  java
  • 几道简单容易被问的题

    1. ArrayList,Vector,LinkList区别?
    2. HashMap和Hashtable的区别?
    3. String类为什么要重写hashCode和equals方法?如果重写equals方法而不重写hashCode方法会出现什么问题?
    4. 写出下面程序运行的结果,给出简单的理由说明为什么会出现这样的结果?
    Integer i1=130;
    Integer i2=130;

    Integer j1=70;
    Integer j2=70;

    Integer m1=new Integer(10);
    int m2=10;
    Integer m3=new Integer(20);

    System.out.println(i1==i2);
    System.out.println(j1==j2);
    System.out.println(m3==(m2+m1));
    5.简述String,StringBuffer,StringBuilder之间的区别?

    1、
    ①.ArrayList和Vector都是基于数组实现的,LinkedList是基于链表实现的。
    ②. ArrayList和LinkedList都是线程非同步的,Vector是线程同步的。可以使用Collections.synchronizedList()来进行同步。
    ③.ArrayList对于查找元素效率高,不适于大量元素的插入和删除。LinkedList对于插入和删除元素的效率高,不适于查找元素。由于Vector实现了同步,在性能上要比ArrayList的效率低。
    ④.ArrayList在容量不足时进行扩容扩充为原来的1.5倍,Vector扩展为原来的2倍。

    2、
    ①. 两者实现的功能基本相同, HashMap是线程非同步的,Hashtable是线程同步的。(jdk5中引入了并发包,其中的ConcurrentHashMap基本可以代替 Hashtble,Hashtable已经基本上不在使用了.)
    ②.HashMap的键和值均允许空值null,Hashtable不允许。
    ③. 两者都实现了Map接口,Hashtable基础了Dictionary类,HashMap没有继承该类。
    ④. HashMap的迭代器Iterator是快速失败机制(fail-fast机制),Hashtable的迭代器enumerator不是快速失败机制。
    3、
    ①. String类中重写了Object的HashCode和equals方法,equals方法比较的是两个对象的内容是否相等,如果两个对象的内容相等则两个对象的hash码必需要相等。
    如果不重写equals,那么比较的将是两个对象的地址是否相等,即相当于使用的是==进行比较。
    ②.String类在比较两个对象 是否相等是首先会计算对象的Hash码,如果两个对象的Hash码不相等,那么这两个对象必定不相等,就不会 在调用equals进行比较了,由于Hash码是基于Hash表存储的,查找只需一次。两个对象不等时,不在比较equals,可以提高比较的效率。
    ③.重写equals方法时,一定要重写hashCode方法。hashCode方法一般用于HashSet/HashMap等集合类来比较两个对象是否相等,如果重写equals方法(比较的是成员属性是否相等)而不重写hashCode方法,那么当两个对象相等时,他们的hashCode却不相等,这就会造成理解的不一致。(Set集合将可能会存储相同的对象)。

    4. false
    true
    true
    理由:Integer是包装类类型,会进行自动 装箱和拆箱。在进行自动拆箱操作时实际上调用的是Integer.valueOf()这个方法,该方法中对于-128-127之间的数会将它直接进行转换成int类型(相当于一个常量池),对于不在这个范围的数,将它存入常量池IntegerCache.cache中,要重新用new关键字创建对象。

    对于第一个超过范围127,要重新创建对象,==只是比较地址是否相等,用equals比较则会返回true.
    对于第二个在范围在-128-127,直接进行拆箱,和String类String s=”liuq”
    String n=”liuq” s==n比较一样,返回true.
    对于第三个当m1+m2相加 后得到的是一个int 类型的变量,==比较时 Integer m3会进行自动拆箱转换成int,所以实际上是比较int 20==20.

    5、String类 字符串不可变的,另外两个均可以变。String类用final关键字修饰,可以用于多线程环境下,StringBuffer是线程安全的类,StringBuilder不是线程安全的,不能用于多线程环境下。
    性能上:StringBuilder>StringBuffer>String.

  • 相关阅读:
    界面开发注意要素,降低界面BUG
    软件测试及其重要性
    浅谈自动化测试工具之Selenium
    浅谈探索式软件测试
    浅谈功能测试流程
    关于软件测试中测试用例的重要性
    第1章 性能测试整体认知
    数据库对比,优化
    2、补充介绍
    1、MarkDown基本语法
  • 原文地址:https://www.cnblogs.com/coderising/p/5721865.html
Copyright © 2011-2022 走看看