`
yuyiming1986
  • 浏览: 62095 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表
Effective Java读书笔试之创建和销毁对象     1.考虑用静态工厂方法代替构造函数      静态工厂方法的第一个好处是,与构造函数不同,静态工厂方法有名字,接口有更好的类型表达能力。      静态工厂方法的第二个好处是,与构造函数不同,它每次被调用的时候,不要求非得创建一个新的对象,特别是对于不变对象而言,可以在被调用时返回同一个对象的引用,重用对象. public static Boolean valueOf(boolean b){ return (b?Boolean.TRUE:Boolean.FALSE); }       ...
  LinkedList源码分析     LinkedList是动态数组的另一种实现,底层以双向循环链表为实现基础,它的优势在于可以快速的删除和添加元素,不需要像ArrayList那样移动大量的元素,但对于查找元素需要逐个遍历链表中的元素,进行匹配。所以LinkedList适用于频繁删除和添加元素,较少查找元素的应用场景。     LinkedList内部使用Entry<E>来封装双向循环链表结点.LinkedList头结点的定义:         private transient Entry<E> header = new Entry<E&g ...
HashSet源码分析     HashSet是Set的一个实现,Set定义一个集合,集合的一个特征是不能包含重复的元素(可以包含null),HashSet底层使用HashMap作为存储结构来实现。           可知HashSet只用来存储对象,并不是key-value对,因为HashMap中的key必须是不同的,跟集合的定义相同, 所以HashSet只使用HashMap中的key来存储元素,而value字段使用同一个常量对象PRESENT就可以了。           private static final Object PRESENT = new Object() ...
  HashMap源码分析       HashMap用来存储key-value对,内部使用拉链法Hash表作为存储结构,key-value被封装成Entry<K, V>,Entry也是链表结点。      1. Hash表的内部结构如下:     Entry<K, V> table[];   table[0]-->Entry(K,V ...
IndexFile.java用于将目录下的文件进行索引 (需要导入lucene-core-3.0.3.jar包) package cn.edu.uestc.lucene; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Date; import org.apache.lucene.analysis.standard.StandardAnalyzer; import or ...
lucene索引和搜索过程中的核心类介绍     lucene是一个工具包,一个Java类库,是一个1M多的jar文件,并不是一个完整的搜索程序,Lucene只专注于文本的索引和搜索功能,它能够让应用程序在不需要了解复杂的索引和搜索的实现的情况下,通过调用简单封装API,为应用程序添加上搜索功能。 1.执行简单的索引过程需要用到以下几个类:IndexWriter Directory Analyzer Document Field IndexWriter:(写索引)是索引过程的核心组件,这个类负责创建新的索引或者打开已有索引,以及向索引中添加,删除或者更新被索引的信息。可以把IndexWri ...
Eclipse中导入jar文件的源码     在eclipse中导入jar文件对应的源码,主要是为了方便查看一些接口的源码,可以直接按着Ctrl+鼠标左键跳到对应的源码文件。      1.选中项目,然后右键,选择属性      2.选择构建路径-->库      3.点开需要添加源代码的jar文件(我想加载lucene-core-3.03.jar的源文件)      4.选择源代码连接, 然后右边点编辑,添加相应的源代码文件就可以了(可以是jar,zip或者文件夹)      
1."for each"循环 JDK5.0增加了一种功能很强的循环结构,可以用来遍历数组(其他类型的元素集合也可以)中的每个元素,而不必需要下标值。 这种for循环语句的格式为: for(variable:collection)statement variable用于暂存集合中的每一个元素,并执行相应的语句statement. 集合collection必须是一个数组或者是一个实现Iterable接口的类对象 示例: for(int i:int_arr){ System.out.println(i); } 传统的for循环 for ...
Java对象序列化    对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中。JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了。而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下。    对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在JVM中的活动对象与字节数组(流)之间进行转换,使用得Java对象可以被存储,可以被网络传输,在网络的一端将对象序列化成字节流,经过网络传输到网络的另一端,可以从字节流重新还原为Java虚 ...
内部类(inner class) 内部类(inner class)是定义在另一个类中的类。 代码结构形式如下 class ClassType{ //注意这并不是声明一个成员属性,而是定义一个内部类 private class InnerClassType{ } } 内部类又分为:普通内部类,局部内 ...
ArrayList源码分析    ArrayList是以数组为基础实现的一个动态数组容器,通过以下的代码分析可知,一方面在ArrayList中添加或者删除元素(除了在数组容器末尾添加或者删除元素),是需要移动大量元素的借助System.arraycopy()来实现拷贝移动,另一方面,由于数组实现基础,可依靠数组下标,可以实现随机访问,当然查找具体的元素,还是需要循环去查找的,再者ArrayList不是thread-safe的,在代码中无论是add,remove,get,都没有任何同步措施,在多线程环境下需要自己确保thread-safe。由此可知ArrayList适用于在任意位置添加,删除元素 ...
float f = 3.4语句正确吗]? 回答这个问题,得首先知道Java类型转换和Java数值常量默认类型相关知识。 1.Java类型转换   Java中不同类型之间的变量赋值时,需要先进行类型转换,才能进行赋值。Java类型转换分为自动转换和强制转 ...

serialVersionUID

 
serialVersionUID    Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应类的serialVersionUID进行比较,如果两个类的serialVersionUID相同就认为是两个类的版本是一致的,可以进行反序列化,否则就认为两个类不兼容,会抛出序列化异常。   Serializable只是标识接口,没有定义任何成员,如果一个类实现了Serializable接口,就表示此类可以被序列化,如果在类中没有定义private static final l ...
如何编写一个自定义的Exception类 1.编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程。   至少要继承Throwable或Throwable的子类(Exception),然后编写两个构造函数,一个无参构造函数,另一个提供描述异常信息字符串参数的构造函数。   在继承任何异常时,将自动继承Throwable类的一些标准特性,如:       错误消息       栈跟踪       异常包装 2.代码示例: class SomeException extends Exception{ public SomeExce ...
Java线程新的同步机制 1.可重入锁ReentrantLock,相当于synchronized块,为临界区提供互斥访问机制.   (1).相关的接口   创建一个可重入锁   Lock lock = new ReentrantLock();   请求锁,如果锁被当前另一个线程持有,则阻塞。   void lock()    释放锁   void unlock();   非阻塞型lock()   boolean tryLock();   (2).使用基本结构    locker.lock();    try{      //code here to access the c ...
Global site tag (gtag.js) - Google Analytics