面试高频——“区别”

2 篇文章 0 订阅

一、ArrayList 和LinkedList的区别

  1. ArrayList是基于数组实现的非线程安全的集合
  2. LinkedList是基于双向链表实现的非线程安全的集合
  3. LinkedList比ArrayList更占用内存,因为LinkedList为每一个节点上存储两个引用节点,一个指向前一个元素,一个指向下一个元素。
  4. 对于随机index访问的get和set方法,一般而言ArrayList速度优于LinkedList,因为ArrayList是通过访问数组的下标,直接找到元素。而LinkedList要通过移动指针进行遍历每个元素,知道找到要找的元素为止。
  5. 对于新增和删除元素而言,一般来说LinkedList的速度要优于ArrayList,因为在新增和删除元素中,ArrayList存在扩容和复制数组。而对于LinkedList来说只需要修改结点指针就可以了。
  6. ArrayList使用数组实现的,无参构造器函数默认的初始化长度为10,数组扩容会将原来的数组,拷贝到新的数组中,长度为原来的1.5倍。LinkedList不存在扩容的问题,因为新增元素放到集合的尾部,修改相应的指针就可以了。

二、HashMap和HashSet的区别

  HashMap

  1. HashMap实现了Map接口
  2. 以键值对的方式进行存储
  3. 新增元素使用到的方法为:put(K key , V value)
  4. 底层通过对Key进行Hash,使用数组加链表或者红黑树的方式进行存储

  HashSet

  1. HashSet实现了Set接口i
  2. 存储元素对象
  3. 新增元素使用的方法为:add(E e)方法
  4. 底层通过HashMap实现,大部分方法都是通过调用HashMap的方法来实现

三、Collection和Collections的区别

  Collection是JDK集合层次结构中的最根本接口,定义了集合类的基本方法。
  Collections首先它是Collection集合框架的工具类,其次Collections是一个包装类,它包含了各种有关集合操作的静态、多态方法,但是不能实例化。

四、UDP和TCP的区别

  TCP

  1. 面向连接,只有建立可靠连接之后才能发送数据
  2. 信息报头有20个字节
  3. 建立可靠连接需要经过三次握手
  4. 断开连接需要经过四次挥手
  5. 需要维护连接状态
  6. 报头中的确认序号、累计确认及超重传机制能够保证不丢包、不重复、按序到达
  7. 拥有流量控制和拥塞控制的机制

  UDP

  1. 不可靠连接,无需维护连接状态
  2. 信息报头8个字节
  3. 接收端,UDP把消息放在队列中,应用程序从队列中读取
  4. 不受控制算法的调度
  5. 面向数据报,不保证接收端一定可以收到

五、cookie和session的区别

浏览器和应用服务交互,是通过HTTP协议进行交互。HTTP协议是无状态的,每次数据交互完成之后连接就会关闭,每次进行交互数据都要建立连接即服务器是无法分辨与哪个浏览器进行交互的。所以为了确认会话中的身份,就可以通过创建cookiesession来进行身份标识!但是二者的工作原理不同,主要区别有以下几点:

  1. session是在服务器端记录信息;

    cookie是在浏览器端记录信息

  2. session保存的数据大小取决于服务器程序的设计,理论值可以做到无限;

    单个cookie保存的数据大小不超过4Kb,大多数浏览器限制一个站点最多有20个cookie

  3. session可以服务器程序处理成Key - value类型的任意文本;

    cookie则是存在浏览器的一段文本中

  4. session由于是存在服务器中,所以其安全性高

    cookie存在于浏览器中,可能被其他程序分析获取,所以安全性比较低

  5. 大量用户会话服务器端保存大量session,对服务器资源消耗比较大;

    信息保存在cookie中,缓解了服务器存储信息的压力

六、HashMap和Hashtable的区别

  1. 线程安全性:HashMap是线程不安全;Hashtable中的方法是synchronized的
  2. key value值是否允许为null:HashMap中的key和value都可以为null,但是key只允许一个null;Hashtable的key和value都不可以为null
  3. 迭代器不同:HashMap的Iterator是fail-fast迭代器;Hashtable还是用了enumerator迭代器
  4. hash的计算方法不同:HashMap计算了hash值;Hashtable使用key的hashCode方法
  5. 默认大小和扩容方式:HashMap默认初始化大小为16,容量必须是2的整数次幂,扩容时将容量变为原来的2倍;Hashtable默认初始化大小为11,扩容时将容量变为原来的2倍加1
  6. 是否有contains方法:HashMap没有contains方法;Hashtable包含了contains方法,类似于containsValue。
  7. 父类不同:HashMap继承自AbstractMap;Hashtable继承自Dictionary
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值