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:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。

猜你喜欢

转载自blog.csdn.net/yang13676084606/article/details/110588379