Java常见面试题Hashmap的结构,jdk1.7和jdk1.8有哪些区别

  1. Hashmap的结构,jdk1.7和jdk1.8有哪些区别
  • 存储结构
    jdk1.7:数组,单链表
    jdk1.8:数组,单链表,红黑树
  • 转移数据方式
    jdk1.7:链表头插,先扩容再插入(put)数据
    jdk1.8:链表尾插,先插入(put)数据再扩容,当链表节点大于8的时候,会变成红黑树结构。如果节点又少于6的时候,会变成链表结构。因为链表太长查询数据会很慢,所以使用红黑树结构。
    数组查询效率快,链表插入,修改效率快。
  1. ArrayList和Linkedist的区别
  • ArrayList:底层数组结构,原理:数据复制。自动扩容数组,每次扩容上次的1/2.原基础的1.5倍。
    利用index按顺序存储,查询效率高。
  • Linkedist:底层链表结构,善于插入,删除数据。
    总结ArrayList更适合读取数据,Linkedist善于插入删除数据。
  1. String,StringBuffer,StringBuilder的区别
  • 可变不可变
    String字符串是常量,在修改时不会改变自身。会重新创建一个字符串对象。
    StringBuffer,StriingBuilder:在修改时会改变对象自身,每次操作都是对对象本身进行修改,并不会生成新的对象。
  • 线程是否安全
    String:对象定义后不可变,线程安全。
    StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串。
    StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。

HashMap和Hashtable的区别

HashMapHashtable
(key,value)可以为null值(key,value)不可以为null值
线程不安全(推荐单线程使用)线程安全(推荐多线程使用)
JDK1.2版本出现的JDK1.0版本出现的
  • 相同点都是一个键对应一个值
  • 都是键不能重复,但是值可以重复

HashMap和HashSet的区别

HashMapHashSet
实现了Map接口实现了Set接口
存储的value值可以重复存储的对象不能重复
存储键值对(key,value)仅仅存储对象
使用put()方法将元素放入map中使用add()方法将元素放入set中
HashMap获取值比较快HashSet较HashMap来说比较慢

HashMap和TreeMap的区别

HashMapTreeMap
数组+单向链表+红黑树红黑树
默认数组长度16,链表转红黑树:8,红黑树转链表:6没有范围控制
(key,value)可以为nullkey不能为null,value可以为null

HashMap比TreeMap快一点,建议多使用HashMap。在需要排序Map的适合适合TreeMap

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值