java基础-hashmap-io

简介: java基础-hashmap-io

一、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关键字的作用

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

boolean res = obj instanceof Class

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

9. java创建对象的方式

new 反射 clone方法 反序列化

10.说说java中的IO流

按照流向分:输入流和输出流

按照操作单元分:字节流和字符流

按照角色分:节点流和处理流

目录
打赏
0
3
3
0
18
分享
相关文章
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
54 3
|
3月前
|
Java之HashMap详解
本文介绍了Java中HashMap的源码实现(基于JDK 1.8)。HashMap是基于哈希表的Map接口实现,允许空值和空键,不同步且线程不安全。文章详细解析了HashMap的数据结构、主要方法(如初始化、put、get、resize等)的实现,以及树化和反树化的机制。此外,还对比了JDK 7和JDK 8中HashMap的主要差异,并提供了使用HashMap时的一些注意事项。
149 2
Java之HashMap详解
Java HashMap详解及实现原理
Java HashMap是Java集合框架中常用的Map接口实现,基于哈希表结构,允许null键和值,提供高效的存取操作。它通过哈希函数将键映射到数组索引,并使用链表或红黑树解决哈希冲突。HashMap非线程安全,多线程环境下需注意并发问题,常用解决方案包括ConcurrentHashMap和Collections.synchronizedMap()。此外,合理设置初始化容量和加载因子、重写hashCode()和equals()方法有助于提高性能和避免哈希冲突。
36 17
Java HashMap详解及实现原理
|
4月前
|
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
65 1
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
108 2
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
122 2
HashMap VS TreeMap:谁才是Java Map界的王者?
HashMap VS TreeMap:谁才是Java Map界的王者?
193 2
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
|
3月前
|
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
72 10
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
136 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)