java基础
文章平均质量分 79
时代新人
复杂的事情简单做,简单的事情重复做,重复的事情用心做
展开
-
LinkedList的源码分析(三)
前面两篇通过源码分析了LinkedList的一些基本方法,这一篇将这些方法做一个整体汇总整理,看看哪些方法的作用是相同的,以及他们在使用中的一个分类,因为LinkedList可作为栈、队列、双端队列使用。实际使用中根据需要自行选取使用哪个方法。原创 2022-10-11 00:00:00 · 203 阅读 · 0 评论 -
LinkedList的源码分析(二)
4)peekLast()方法:检索但不删除此列表的最后一个元素,如果此列表为空则返回{@code null}。方法:用指定的元素替换此列表中指定位置的元素。方法:将一个元素压入由此列表表示的堆栈。换句话说,将元素插入到列表的前面。方法:检索但不删除此列表的头(第一个元素,可为null)。方法:检索并删除此列表的尾(最后一个元素,可为null)。方法:检索并删除此列表的头(第一个元素,可为null)。方法:添加指定元素作为列表的尾部(最后一个元素)。方法:将指定的元素插入到列表的开头,此时的时间复杂度是。原创 2022-10-10 08:00:00 · 317 阅读 · 0 评论 -
LinkedList的源码分析(一)
通过源码可以看到node(int index)方法遍历查找指定元素索引处的非空节点的时候是分成两部分来遍历查找的,当要查的元素的index索引小于列表大小的一半时候,进行index之前的部分查找;当要查的元素的index索引大于列表大小的一半时候,进行index之后的部分查找,这样可以节省很多时间,否则 会在非空节点之前插入该元素,这是会先通过node(int index)方法遍历查找指定元素索引处的非空节点,此时的时间复杂度是。如果要插入的索引是列表的大小,则将该元素追加到列表的末尾,同1)中的。原创 2022-10-09 11:49:54 · 283 阅读 · 0 评论 -
ArrayList的源码分析
先要循环遍历列表找到要移除的元素,此时的时间复杂度已为O(n),当找到要移除的元素时,调用fastRemove()方法时,还要考虑到需要复制底层数组,时间复杂度还是O(n),整合在一起就是O(n)*O(n),也就是。如果需要扩容,以确保它至少可以容纳由最小容量参数指定的元素数量,扩容的时候,执行Arrays.copyOf()方法,把原有数组中的元素复制到扩容后的新数组当中,原数组被抛弃,会被GC回收。(8)remove(Object o),如果指定元素出现,则从此列表中删除第一个出现的元素。原创 2022-10-01 10:00:00 · 700 阅读 · 0 评论 -
HashMap和Hashtable的区别源码对比(二)
HashMap和Hashtable的区别源码对比,常用的一些方法,如:map.put("","");map.get("");map.containsKey("");map.containsValue("");map.remove("");map.clear();原创 2022-09-23 15:26:02 · 258 阅读 · 0 评论 -
HashMap和Hashtable的区别源码对比(一)
在Java中,可以使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对象的锁,其他线程才能执行这个方法或者代码块。否则,因为我们使用的是2的幂展开,所以每个bin中的元素要么必须保持相同的索引,要么在新表中以2的幂偏移量移动。而hashmap不是同步的,适用于单线程环境。原创 2022-09-20 14:18:20 · 206 阅读 · 0 评论 -
synchronized同步以及双重检索
一、synchronized同步参考两个线程同时执行会出错,那么最简单的方法是让CPU执行完一个线程,再执行另一个线程,那么Java中给出了一个非常简单的解决办法,【synchronized】:是一种同步锁。简单解释一下:就是synchronized修饰的代码,同时只能有一个线程执行,即执行完一个线程,再执行另一个,其它需要执行的线程都要排队 。synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句块......原创 2022-09-01 11:02:48 · 1148 阅读 · 0 评论