前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java学习八股之java基础-hashmap-io

java学习八股之java基础-hashmap-io

作者头像
一只
发布2023-08-10 16:00:48
1620
发布2023-08-10 16:00:48
举报

欢迎评论区纠错和建议,祝大家伸手就是大厂offer~

一、Java基础

1.==和equals()的区别

==比较基本类型的值,equals比较引用类型的地址

equals是Object的方法,底层还是==实现的,但是有的类重写了equals方法,例如string,重写之后比较的值,如果重写了equals一定要重写hashcode,如果只重写equals不重写hashCode,会在某些场景下导致程序异常执行,也会降低hash类型的集合的效率

2.HashMap原理

HashMap在JDK1.7采用数组+链表实现 HashMap在JDK1.8采用数组+链表+红黑树实现,key不可重复可以为null,线程不安全

扩容机制 默认容量为16,负载因子为0.75,当HashMap中元素个数超过容量*负载因子的时候,数组长度变为两倍,数组长度达到64,链表长度达到8的时候扩容为红黑树

put过程

  1. 对key的hashCode()进行hash运算,得到index
  2. 如果没碰撞就放入bucket里
  3. 如果碰撞了就放到链表末尾
  4. 如果碰撞导致链表过长就转换为红黑树
  5. 如果节点已经存在就替换旧的value
  6. 如果bucket满了就resize(扩容检测)

get过程

  1. 对key的hashCode()进行hash运算,得到index
  2. 如果bucket第一个节点命中,直接返回
  3. 如果有冲突,需要key.equals(k)去查找对应的entry
  4. 如果是树,在树中查找O(logn)
  5. 如果是链表,在链表中查找O(n)

3.ConcurrentHashMap

线程安全的hashmap JDK1.7 使用分段锁,一个map分为16段,每一段是单独的hashmap,每次使用对其中一段加锁 JDK1.8 采用CAS+Synchronized保证线程安全,插入采用cas版本标记,在其他线程没有操作的时候扩容,删除的时候使用Synchronized去保证并发删除

4.HashMap和HashTable的区别

  1. hashtable每个方法都用Synchronized修饰,线程安全但是效率低
  2. hashtable的key不可以null,hashmap可以有一个null的key
  3. hashtable对key只做一次hash,hashmap做两次hash
  4. hashtable底层是数组+链表

5.ArrayList和LinkedList的区别

arraylist是动态数组,满了之后new一个1.5倍的大小,将原来的copy过来,数组查找快,删除慢 linkedlist是链表实现,查找慢,添加数据快

6.如何保证ArrayList的线程安全

  1. 采用collentions.synchronizedList()给arraylist加锁
  2. 使用Vector,底层和array一样,但是每个方法都加锁,效率低
  3. 使用juc的CopyOnWriterArrayList,该类读不加锁,写创建了一个副本,写完修改指针

7.String、StringBuffer、StringBuilder区别

String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。

StringBuffer可变并且线程安全

StringBuiler可变但线程不安全。

操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer。

8. instanceof关键字的作用

判断一个对象是否是一个类的实例

代码语言:javascript
复制
boolean res = obj instanceof Class

其中obj为一个对象,如果obj是class的对象或者直接间接继承这个类或者实现了这个接口,就会返回true 否则返回false

9. java创建对象的方式

new 反射 clone方法 反序列化

10.说说java中的IO流

按照流向分:输入流和输出流 按照操作单元分:字节流和字符流 按照角色分:节点流和处理流

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎评论区纠错和建议,祝大家伸手就是大厂offer~
  • 一、Java基础
    • 1.==和equals()的区别
      • 2.HashMap原理
        • 3.ConcurrentHashMap
          • 4.HashMap和HashTable的区别
            • 5.ArrayList和LinkedList的区别
              • 6.如何保证ArrayList的线程安全
                • 7.String、StringBuffer、StringBuilder区别
                  • 8. instanceof关键字的作用
                    • 9. java创建对象的方式
                      • 10.说说java中的IO流
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档