- 浏览: 63426 次
- 性别:
- 来自: 成都
最新评论
-
hanmiao:
博客已经806天不再更新了,长草了都...
Effective Java读书笔试之创建和销毁对象 -
zhengjj_2009:
问你一个小问题,“Java虚拟机通过装载,连接和初始化一个Ja ...
深入JVM读书笔记之类装载+连接+初始化 -
Branding:
对!!!
类的初始化顺序 -
yuyiming1986:
为什么equals()相等的两个对象,hashCode( ...
hashCode()和equals方法 -
fd_zhaoshuo:
①两个obj,如果equals()相等,hashCode()一 ...
hashCode()和equals方法
文章列表
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文件的源码
在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
- 博客分类:
- Java编程语言
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 ...