• java常见面试题(二)


    1.java集合类

      Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

       LinkedList实现了List接口,允许null元素。由于linkedlist底层是基于双向链表实现的,所以LinkedList查询效率不高,但是删除和插入效率略高。线程不安全的

       ArrayList实现了List接口,允许null元素。底层基于数组实现,默认长度为10,可自动扩容,扩容大小为原来的 1/2。查询速度快,插入和删除效率低。线程不安全的

       Vector非常类似ArrayList,但是Vector是线程安全的。

          Stack继承自Vector 是一个后进先出的栈。

       Set是一种不包含重复的元素的Collection

       Map没有继承Collection接口,map提供一个key到value的映射。map的key不能重复,每个key只能映射一个value。

       Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。同步的。

       HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。在JDK1.8之前HashMap是基于数据组+链表实现的,1.8修改为数组+链表+红黑树。

       HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度依然为O(1),因为最新的Entry会插入链表头部,急需要简单改变引用链即可,而对于查找操作来讲,此时就需要遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。get方法的实现相对简单,key(hashcode)-->hash-->indexFor-->最终索引位置,找到对应位置table[i],再查看是否有链表,遍历链表,通过key的equals方法比对查找对应的记录。

    在JDK1.8中当某个数组中的链表数据大于8时会转换为红黑树来加大查询效率。

     2.基础问题

      (1)如何快速的求某个数的N次方,例如2的5次方?

        答:2<<4。2<<1相当于2*2   2>>1相当于2/2

  • 相关阅读:
    在Linux下修改图形界面的分辨率
    Linux 常用命令
    读ActiveAndroid源码(三)
    读ActiveAndroid源码(二)
    读ActiveAndroid源码(一)
    Android中图片的文件储存
    构造器内部的多态方法的行为
    摸触事件分发的小实践——关闭View滑动
    【Java】 关于类的初始化
    git配置http代理
  • 原文地址:https://www.cnblogs.com/lkf-00889/p/7424388.html
Copyright © 2020-2023  润新知