Java常用类库
问而知
向Java提问,探寻代码内含的意蕴
展开
-
问一:Collecton体系说一下?
CollectionList(有序的、可重复,可为null) ArrayList:线程不安全,查询速度快。底层数据结构是数组 Vector:线程安全,但速度慢,已被 ArrayList 替代。底层数据结构是数组 LinkedList:线程不安全。增删速度快。底层数据结构是链表Set(无序的、不可重复) HashSet:HashSe...转载 2019-04-18 10:49:36 · 219 阅读 · 0 评论 -
问九:如何设计一个线程安全的HashMap?
1. 将所有public方法都加上synchronized: 相当于设置了一把全局锁,所有操作都需要先获取锁(比如直接使用Collections.synchronizedMap()方法对其进行加锁操作),java.util.HashTable就是这么做的,性能很低2.由于每个桶在逻辑上是相互独立的,将每个桶都加一把锁,如果两个线程各自访问不同的桶,就不需要争抢同一把锁了。这个方案的并发性...转载 2019-04-18 10:56:34 · 1499 阅读 · 0 评论 -
问八:HashMap、Hashtable、ConcurrentHashMap三者的区别是什么?
HashMap线程不安全,数组+链表+红黑树Hashtable线程安全,锁住整个对象,数组+链表ConccurentHashMap线程安全,CAS+同步锁,数组+链表+红黑树HashMap的key/value均可以为null,而其他两个类不支持(特别注意空字符串和null的区别),也就是说HashMap中getKey取到为null的时候,不一定是代表在hash表中没有当前值,也有...转载 2019-04-18 10:55:45 · 135 阅读 · 0 评论 -
问七:HashTable和HashMap的区别?
①继承不同public class Hashtable extends Dictionary implements Mappublic class HashMap extends AbstractMap implements Map②Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的在多线程并发的环境下,可以直接使用Hashtable,但是要...原创 2019-04-18 10:55:25 · 99 阅读 · 0 评论 -
问六:ConcurrentHashMap负载因子为什么是 0.75f ?
引入:HashMap、ConcurrentHashMap、Hashtable的DEFAULT_LOAD_FACTOR(Hashtable没有这个参数,但是无参构造器直接传了0.75f,猜测是后面使用hash之后感觉这个挺好的,后面添加的)都是0.75f,当然,也都可以指定APIdoc:* The main disadvantage of per-bin locks i...原创 2019-04-18 10:54:51 · 1694 阅读 · 0 评论 -
问五:说说ConcurrentHashMap吧?
引入:如何优化Hashtable?通过锁细粒度化,将整个锁拆解成多个锁进行优化这儿就引入了早期的ConcurrentHashMap使用的是分段锁技术,把Bucket分成几段来存储,为每一段数据都配一把锁(segment)【这样做的原因是:为每个Bucket都添加一把锁的话,资源消耗大,比如1w个Bucket就要有1w个锁】当某个程序访问某个数据段的时候,就会获得当前数据段...原创 2019-04-18 10:54:23 · 355 阅读 · 0 评论 -
问四:谈谈你对Hashtable的理解?
引入:Hashtable底层结构上其实是和HashMap相差不大的,但是Hashtable是线程安全的,HashMap不是,而且JDK1.8之后,HashMap使用的是数组+链表+红黑树的结构,而Hashtable用的是数组+链表的形式。ConcurrentHashMap其实在早期也是模仿了Hashtable的结构,但是在其基础上进行了改进,对锁进行了细粒度划分,锁的是每个数组元素(也可以...原创 2019-04-18 10:53:12 · 364 阅读 · 0 评论 -
问三:解决hash冲突的方法有哪些?
开放地址法再hash的方法拉链法建立公共溢出区法开放地址法:1. 基本思想:当发生地址冲突的时候,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止;2. 所用公式 Hi(key) = [H(key) + di]mod m;其中i = 1、2、3.....k(k<m-1)H(key)为关键字key的直接hash地址m为hash表的长...转载 2019-04-18 10:52:30 · 408 阅读 · 0 评论 -
问二:谈谈你对HashMap的理解?
HashMap(Java8以前):数组+链表HashMap(Java8及以后):数组+链表+红黑树如果存入的key是一个自定义的类,该怎么办呢?(重新equals和hashcode)进入源码:可以看到key是由Set来存的,就不能够有重复数据了values用Collection来存,可以重复内部存储结构是[是一个MapEntry的实现]数组被...原创 2019-04-18 10:51:50 · 1057 阅读 · 0 评论 -
问十:String StringBuffer StringBuilder的区别是什么?
直接上APIdocjava.lang.StringThe String class represents character strings. All string literals(字面量) in Java programs, such as "abc", are implemented as instances of this class.(所以字符串常量池中存的应该是对象吧?挖坑,...转载 2019-04-18 10:57:08 · 126 阅读 · 0 评论