Java LruCache

为了更好的使用内存,操作系统中有一种Lru(Least Recently Used)策略,将最近最少使用的项移出容量有限的内存。不仅仅操作系统这样做,平时做一些android应用等也需要在有限的空间内保存一些状态。下面来看分析我们要怎么做这个基于Lru策略的缓存: 能够快速的读取与写入 ① 能够实现Lru策略 ② 能够适应多线程并发访问操作 ③ 多个线程可以同时读取,但是写操作与读操作,写操作与写

探究Java中的克隆

克隆,想必大家都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术将哺乳动物的成年体细胞培育出新个体,甚为神奇。其实在Java中也存在克隆的概念,即实现对象的复制。 本文将尝试介绍一些关于Java中的克隆和一些深入的问题,希望可以帮助大家更好地了解克隆。 Java中的赋值 在Java中,赋值是很常用的,一个简单的赋值如下 //原始类型 int a = 1; int b = a; //引用类型 S

解读ClassLoader

ClassLoader一个经常出现又让很多人望而却步的词,本文将试图以最浅显易懂的方式来讲解 ClassLoader,希望能对不了解该机制的朋友起到一点点作用。 要深入了解ClassLoader,首先就要知道ClassLoader是用来干什么的,顾名思义,它就是用来加载Class文件到JVM,以供程序使用 的。我们知道,java程序可以动态加载类定义,而这个动态加载的机制就是通过ClassLoad

Java源码编译过程

源代码(.java文件)—>分析(词法、语法分析)和填充符号表—>注解处理—>语义分析和字节码生成(.class文件)   词法分析: 将源代码转变成标记(Token)集合,标记是编译过程的最小元素。如 int a = b + 2; —> int、a、=、b、+、2 语法分析: 根据语法由Token序列生成抽象语法树

ArrayList Vector LinkedList 区别与用法

ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动 等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要 差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只

Vector和ArrayList的区别

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数 组大小不满足时需要增加存储能力,就要讲

StringBuilder与StringBuffer的区别

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类。String类是不可变类,任何对String的改变都会引发 新的String对象的生成;而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象,可变和不可变类这一对对象已经齐

Trie树的java实现

Trie树,又称字典树,关于它的结构就不详细介绍了。Trie树在单词统计、前缀匹配等很多方面有很大用处。它的主要特点如下: 根节点不包含字符,除根节点外的每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。  每个节点的所有子节点包含的字符都不相同。 我自己用java实现了一个最基本的Trie树,功能有:插入单词,查找单词,删除单词,以字典序遍历打印出