zoukankan      html  css  js  c++  java
  • Java--SE简答题4

    1. 集合和数组的比较

    答:(1)相同点:都是数据的容器,在数组或集合中都可以存储多个数据

    (2)不同点:A)数组中的元素都是相同的类型(基本类型和引用类型);集合中的元素可以是任意类型(但只可以存引用类型)

    B)长度:数组是定长;集合长度可以修改

    C)效率方面数组更高

    1. 简述List、Set、Collection、Map的区别和联系。

     答:(1)Collection接口存储一组不唯一,无序的对象

    (2)List接口存储一组不唯一,有序(插入顺序)的对象

    (3)Set接口存储一组唯一,无序的对象

    (4)Map接口存储一组键值对,提供key到value的映射。Key无序,唯一;value可以重复。如果只使用key存储,不使用value那就是Set

    1. ArrayList和LinkedList的区别和联系。它们的底层分别是用什么实现的?

    答:(1)ArrayList:

    a)分配了连续的空间,是长度可变的数组

    b)优点:遍历 随机访问元素效率高

    c)缺点:添加删除元素要移动大量元素效率低,按照内容查询效率低

    d)使用无参数构造方法创建ArrayList对象时,默认底层数组长度是0.第一次添加元素,数组的容量为初始容量10和第一次添加元素个数的较大值

    e)容量不足时进行扩容,为原来的1.5倍(增长50%),还不够的话就增长到能融入元素的最小值

    f)ArrayList可以使用迭代器遍历

    (2)LinkedList:

    A) 采用双相链表存储方式

    B) 优点:插入删除效率高(前提是必须先低效率查询。如果删除发生在头尾可以减少查询次数)

    C) 缺点:遍历和随机访问元素效率低

    D) LinkedList实现了Deque接口,可以当做队列和栈使用

    (3)使用场景

     大量的根据索引查询的操作,大量的遍历操作(按照索引0--n-1逐个查询一般),建议使用ArrayList
     * 如果存在较多的添加、删除操作,建议使用LinkedList
     * 建议 * List<Integer> list = new ArrayList<Integer>();
     * 不建议 * ArrayList<Integer> list = new ArrayList<Integer>();

    1. 每个对象都有一个哈希码吗?哈希码是根据什么生成的?会不会重复?

    答:是的;Object类当中的hashcode()进行获取;同一个对象的哈希码是不会重复的

    1. HashSet采用了哈希表作为存储结构,请说明哈希表的特点和实现原理。

    提示:结合Object类的hashCode()和equals()说明其原理

    • 哈希表的查询速度特别快,时间复杂度为O。
    • HashMap、Hashtable、HashSet这些集合采用的是哈希表结构,需要用到hashCode哈希码,hashCode是一个整数值。
    • 系统类已经覆盖了hashCode方法 自定义类如果要放入hash类集合,必须重写hashcode。如果不重写,调用的是Object的hashcode,而Object的hashCode实际上是地址。
    • 向哈希表中添加数据的原理:当向集合Set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值来得到一个位置用来存放当前对象,如在该位置没有一个对象存在的话,那么集合Set认为该对象在集合中不存在,直接增加进去。如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象进行equals方法比较,如果该equals方法返回false,那么集合认为集合中不存在该对象,在进行一次散列,将该对象放到散列后计算出的新地址里。如果equals方法返回true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了。
    • 在哈希表中判断两个元素是否重复要使用到hashCode()和equals()。hashCode决定数据在表中的存储位置,而equals判断是否存在相同数据。
    • Y=K(X) :K是函数,X是哈希码,Y是地址
     
     
  • 相关阅读:
    3.4
    3.3 TensorFlow运行模型 ------- 会话
    3.2 TensorFlow数据模型 ---- 张量
    3.1 TensorFlow计算模型 --- 计算图
    寻找两个有序数组的中位数
    最长子串
    vector的遍历删除
    超时空大决战
    面经七
    面经五
  • 原文地址:https://www.cnblogs.com/9797ch/p/11839121.html
Copyright © 2011-2022 走看看