3.容器
文章平均质量分 88
郑学炜
这个作者很懒,什么都没留下…
展开
-
6.jdk1.7与1.8解决Hash冲突方法
在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突,它们使用单向链表来存储相同索引值的元素。在最坏的情况下,这种方式会将HashMap的get方法的性能从O(1)降低到O(n)。为了解决在频繁冲突时hashmap性能降低的问题,Java 8中使用平衡树来替代链表存储冲突的元素。这意味着我们可以将最坏情况下的性能从O(n)提高到O(logn)。在Java 8中使用常量T...原创 2018-03-15 22:22:36 · 2374 阅读 · 0 评论 -
9.HashMap里的红黑树是什么
1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map,multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O...原创 2018-05-05 20:05:18 · 5707 阅读 · 1 评论 -
3.java中Map,List与Set的区别
Set,List,Map的区别java集合的主要分为三种类型:· Set(集)· List(列表)· Map(映射)要深入理解集合首先要了解下我们熟悉的数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存...原创 2018-04-17 00:54:08 · 358 阅读 · 2 评论 -
2.Java中ArrayList和LinkedList区别
Java中ArrayList和LinkedList区别: ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势...原创 2018-03-21 01:00:40 · 359 阅读 · 0 评论 -
1.String,StringBuffer与StringBuilder的区别
java 中 StringBuffer 和 String 是有一定的区别的,首先,String 是被 final 修饰的,他的长度是不可变的,就算调用 String 的 concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象,而 StringBuffer 的长度是可变的,调用StringBuffer 的 append 方法,来改变 String...原创 2018-03-20 20:36:10 · 1007 阅读 · 0 评论 -
4.HashMap和Hashtable区别
一: 存储方式相同,利用一个内部类,实现的是Map.Entity接口,内部实现不一样,但是都是以节点方式进行存储的。是一种单向链表,链表是基于数组的。 不同点: 一: HashMap可以允许key为null,value为null,HashTable都不允许为null,贴出来jdk8的HashTable的部分源码: 1 publicsynchronized V put(K key, V...原创 2018-03-10 16:45:30 · 775 阅读 · 1 评论 -
7.多线程下put和get操作导致的HashMap线程不安全问题
谈谈HashMap线程不安全的体现HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了。那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢?3个情况,1个put会同时扩容早造成死循环,2.2个put引发扩容,另外的线程有可能get不到。3.有可能2个同时put,导致1个丢失,被后1个put给覆盖掉了。 一种情况是...原创 2018-03-10 16:34:31 · 16231 阅读 · 1 评论 -
8.HashMap添加的对象为什么要重写equals和hashcode
浅谈HashMap以及重写hashCode()和equals()方法因为,equals()方法只比较两个对象是否相同,相当于==,而不同的对象hashCode()肯定是不同,所以如果我们不是看对象,而只看对象的属性,则要重写这两个方法,如Integer和String他们的equals()方法都是重写过了,都只是比较对象里的内容。使用HashMap,如果key是自定义的类,就必须重写hashcode...原创 2018-03-09 18:14:39 · 17603 阅读 · 4 评论 -
5.jdk1.7与1.8的HashMap和ConcurrentHashMap
1.7的HashMap设计1 1.8的HashMap设计1.1 整体概览HashMap采用的是数组+链表+红黑树的形式。数组是可以扩容的,链表也是转化为红黑树的,这2种方式都可以承载更多的数据。用户可以设置的参数:初始总容量默认16,默认的加载因子0.75初始的数组个数默认是16 容量X加载因子=阈值(如第一次扩容16*0.75=12个)一旦目前容量超过该阈值,则执行扩容操作。什么时候扩容?· ...原创 2018-03-09 16:54:06 · 290 阅读 · 0 评论 -
10.浅谈AVL树,红黑树,B树,B+树原理及应用
二叉查找树简介二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:· 任意节点左子树不为空,则左子树的值均小于根节点的值.· 任意节点右子树不为空,则右子树的值均大于于根节点的值.· 任意节点的左右子树也分别是二叉查找树.· 没有键值相等的节点.局限性及应用一个二叉查找树是由n个节点随机构成,所以,对于某些情况...原创 2018-05-05 21:56:20 · 379 阅读 · 0 评论