java基础
文章平均质量分 72
BNMB888
这个作者很懒,什么都没留下…
展开
-
super()和this()方法
用法:1,用在类的构造方法中;2,必须写在构造方法的第一行;(因为类必须构造完成后才能进行其他操作)3,不可以在一个构造方法中同时使用;(如果同时使用的话,this()会调用父类的构造方法,和super()冲突,会)super():表示调用父类的构造方法this():表示条用本类的其他构造方法原创 2017-08-08 11:25:49 · 260 阅读 · 0 评论 -
java的volatile图例
原创 2017-08-19 10:49:51 · 294 阅读 · 0 评论 -
java集合之LinkedList
概要:底层实现为双向链表,改易查难。1,Classpublic class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable2,成员变量(只有first和last,所以只能根据index1/2用last一个一个查找原创 2017-08-12 16:36:33 · 621 阅读 · 0 评论 -
java集合之ArrayDeque
概要底层实现是数组elements,通过head和tail来实现循环数组。数组大小每次扩大2倍,所以2的指数倍。(tail是最后一个元素的下一个空元素的下标,是可以直接插入的,也就是数组始终有一个空的,所以下面的操作都是先赋值再扩容的)取莫操作(head - 1) & (elements.length - 1)(tail + 1) & (elements.length - 1)原创 2017-08-12 19:58:32 · 393 阅读 · 0 评论 -
java集合之TreeMap
概要:底层实现为红黑树(BR-Tree),也就意味着containsKey(), get(), put(), remove()都有着log(n)的时间复杂度,没有路径能多于任何其他路径的两倍长。【成员变量:Entry root】性质1. 节点是红色或黑色。性质2. 根节点是黑色。性质3 每个叶节点(NIL节点,空节点)是黑色的。性质4 每个红色节点的两个子节原创 2017-08-13 11:07:50 · 297 阅读 · 0 评论 -
java集合之hashMap的hash原理
JDK1.8中的HashMap的hash原理:分为两步:1,hash()计算static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }2,index计算index = (tab.len原创 2017-08-14 16:34:03 · 350 阅读 · 0 评论 -
java集合之HashMap
概要:底层实现为数组(transient Node[] table),当发生hash碰撞时,以单链表的形式保存,但在1.8后,当table大小超过64,链表长度大于8时,会把链表转成红黑树来保存。否则进行扩容处理。当进行remove操作是,如果红黑树的大小小于6,就会把红黑树转成单链表。8-6差2,这个空隙为了避免频繁的进行转换。所以1.8以后的HashMap里面是单链表和红黑树混合形式。原创 2017-08-14 17:05:37 · 217 阅读 · 0 评论 -
java集合之HashMap的扩容resize
JDK1.7中,resize时,index取得时,全部采用重新hash的方式进行了。JDK1.8对这个进行了改善。以前要确定index的时候用的是(e.hash & oldCap-1),是取模取余,而这里用到的是(e.hash & oldCap),它有两种结果,一个是0,一个是oldCap,比如oldCap=8,hash是3,11,19,27时,(e.hash & oldCap)的结果原创 2017-08-14 17:44:36 · 5681 阅读 · 2 评论 -
java集合之LinkedHashMap
概要:LinkedHashMap继承HashMap,但是添加了双向链表来保存元素的顺序。LinkedHashMap重写了三个回调方法和两个newNode方法来处理双向链表的添加和修改。// Callbacks to allow LinkedHashMap post-actions void afterNodeAccess(Node p) { } void afterNode原创 2017-08-15 14:18:11 · 280 阅读 · 0 评论 -
java之volatile关键字
一.内存模型的相关概念计算机有CPU和内存,硬盘,运行速度上CPU>内存>硬盘,所以在内存和CPU间加了一个CPU寄存器高速缓存。每个CPU每次都是先从主存中读取值放到高速缓存中,当要计算时从高速缓存中读入,算完后,再把高速缓存的值写入主存。这样多CPU的场合就会产生缓存不一致问题。为了解决缓存不一致性问题,通常来说有以下2种解决方法: 1)通过在转载 2017-08-18 16:49:20 · 406 阅读 · 0 评论 -
java 位运算
Java提供的位运算符有:左移( > ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。1、左移( Test1、将5左移2位:[java] view plain copypackage com.xcy;原创 2017-08-11 18:25:15 · 247 阅读 · 0 评论 -
JAVA集合之ArrayList
概要:底层是一个Object数组来实现的,初始大小10,每次1.5倍。1,类public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable2,成员变量 private static fi原创 2017-08-11 16:51:11 · 298 阅读 · 0 评论 -
java泛型
package java.generic;public class Generic { private K key; private V value; public Generic() { } public Generic(K key, V value) { this.key = key; this.value = value; } public原创 2017-08-08 15:24:50 · 314 阅读 · 0 评论 -
String StringBuilder StringBuffer
String1,final不可变的2,重写equals方法 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { Stri原创 2017-08-08 17:05:46 · 176 阅读 · 0 评论 -
java几种缓存的简单实现
1,先进先出FIFOpackage chin.tei.fifo;import java.util.LinkedHashMap;public class CacheFIFO extends LinkedHashMap{ private static final long serialVersionUID = -1942463383036528618L; private fina原创 2017-08-16 14:54:57 · 692 阅读 · 0 评论 -
java实现时间复杂度O(1)的LFU缓存
LFU缓存一般需要排序来解决命中率问题(上一篇的LFU实现也是利用了Collections.sort),导致时间复杂度较高。下面采用一种算法让LFU的时间复杂度成为O(1)。数据设计:1,一个双向链表来保存命中数(下面代码的NodeCount countHead,结构中包含2的map)。2,命中数相同的放在一个双向链表的map中(这里用的是LinkedHashMap,主要是利用原创 2017-08-17 10:44:24 · 1228 阅读 · 0 评论 -
java集合之PriorityQueue
概要:PriorityQueue是优先队列,通过自然顺序或者指定的顺序来实现队列的头部是最小元素的集合。(简单说就是小优先)。*不允许放入NULL,其实Queue接口的实现都不应该放入NULL,因为这个接口总有一对方法,失败时一个error,一个返回false或NULL,所以为了避免到底是null元素还是操作失败的区分,不应该放入NULL。实现原理:其通过堆实现,具体说是通原创 2017-08-17 16:04:43 · 302 阅读 · 0 评论 -
java并发之ThreadLocal
概要:ThreadLocal一般被定义成private static的,这样的话,对于多线程还是web程序来说,在当前线程的任意阶段都可以操作(操作的是自己的局部变量,于其它线程是隔离的)。设计原理:1,Thread.java中保持了一个成员变量mapThreadLocal.ThreadLocalMap threadLocals = null;2,ThreadLoc原创 2017-08-17 16:46:17 · 298 阅读 · 0 评论 -
java集合(一)总图
总结 单线程并发ListsArrayList——基于泛型数组LinkedList——不推荐使用Vector——已废弃(deprecated)CopyOnWriteArrayList——几乎不更新,常用来遍历Queues / dequesArrayDeque——基于泛型数组Stac原创 2017-08-10 16:38:50 · 435 阅读 · 0 评论 -
java集合之4种Reference
public abstract class Reference {public class SoftReference extends Reference {public class WeakReference extends Reference {public class PhantomReference extends Reference {可以用以下表格总原创 2017-08-18 15:57:15 · 368 阅读 · 0 评论 -
java finally return
执行顺序:①先执行return操作②确定返回值,但是此时并不会立刻返回。(如果返回值是非引用类型(int等),即使在finally改值也没用,也只会返回第一步中计算出来的返回值。)③执行finally中的操作(如果该finally操作中也包含有return操作则会直接返回,也就是说正常的return会被finally的return覆盖)④finally里面的内容执行完了,程序则会返原创 2017-08-15 16:23:29 · 347 阅读 · 0 评论