zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/lkf-00889/p/7424388.html
Copyright © 2011-2022 走看看