- 博客(7)
- 收藏
- 关注
原创 ConcurrentHashMap源码解析
出现原因1hashmap在进行put时,会尝试扩容,扩容时,会使用rehash()这个函数,然后在重新将以前的节点前移到新的表中,可能会出现循环列表,a->b,b->a while(a.next!=null) a=b;原因是线程并发修改的导致的。使得cpu一直在空转,浪费了资源。2为什么不是用hashtable,hashtable的同步方法之间是互斥的,意思是 这个hashtab...
2019-02-23 16:13:04
158
原创 Vector源码详解
1是一中线程同步(有争议)的容器,底层也是使用数组来储存,不过很多方法都加了syconized实现同步,效率很低,不适合在并发容器,而是作为同步容器,它的数组长度是变大为原来1倍,而且它的长度还以减小。但并非完全线程安全,因为同步方法内部是互斥安全的,但是方法与方法之间并发是互斥访问的。private static Vector<Integer> vector=new Vector...
2019-02-19 16:22:54
208
原创 LinkedList的源码详解
ArrayList 和linkedList区别联系LinkedList与ArrayList一样实现List接口~~~~~~~~,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口双向链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。LinkedList实现所有可选的列...
2019-02-19 16:22:09
120
原创 ArrayList源码详解
ArrayList1特点适合做查找;不适合做删除和插入,这样会复制,移动元素;查找O(1),删除和插入为O(n)默认构造器无参数初始空数组,new时,数组大小仍然为空,一旦添加就扩容变成10;private static final Object[] EMPTY_ELEMENTDATA = {};<!--与上面都是空数组,但是带大小的构造器初始化时,会使让该数组变成该大小,之...
2019-02-19 15:11:43
396
原创 java策略设计模式
1本身对象持有其他对象,2本身的行为,依赖于传入的对象3做到根据传入的对象不同就执行不同的行为优点:动态改变对象行为缺点:容易产生很多行为策略对象客户必须知道每个行为对象public class Client {public static void main(String[] args) {Duck duck = new Duck();GaGa gaG...
2019-02-18 20:59:59
800
原创 java面向对象的特征
封装子类的数据字段设置为private不被其他类通过(A.field)形式直接访问,外部只能通过公开方法得到。下面这个例子就是封装私有字段,对外提供公开接口。&lt;!--双重否定来获取单例--&gt;public class Singleton{ private Singleton singleton; private Singleton(); public Si...
2019-02-18 20:32:33
179
原创 equals(),==,hashcode()
equals和==1“==”判断两个引用对象是否指向同一内存地址2“equals()”判断两者的内容是否相等属于java.lang.Object的方法。每个子类可以覆写该方法来实现自己的内容相等。3“equals()”Object类中默认是靠&quot; ==”识别,但是其他类像Integer,String会覆盖掉实现自己的equals方法;String a = new String(&quot;abc&quot;);...
2019-02-18 20:31:18
184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人