第四条-避免使用重复的对象

原创 2012年03月30日 16:54:26
package EffectiveJava;

import java.util.Calendar;
import java.util.Date;

public class _2_4 {
	private final Date birthday;
	private static final Date start;
	private static final Date end;
	private  transient Date s = null;
	private transient  Date e = null;
	public _2_4(Date birthday) {
		this.birthday = birthday;
	}
	static {  // 将这个方法写在静态区域块中,这样只需生成一个对象实例,大大提高了效率,但附加的对象貌似太臃肿,如果方法一次都不调用的话,这里初始值就是浪费了
		Calendar cale = Calendar.getInstance();
		cale.set(1946, Calendar.JANUARY, 1, 0, 0);
		start = cale.getTime();
		cale.set(1965,Calendar.JANUARY,1,0,0);
		end = cale.getTime();
	}
	public boolean isBaby() { // 些方法每次被调用的时候都会生成一个Calendar 对象,而执行完方法后又迅速被垃圾收集机制回收,所以效率很慢
		Calendar cale = Calendar.getInstance(); 
		cale.set(1946, Calendar.JANUARY, 1, 0, 0);
		Date start = cale.getTime();
		cale.set(1965,Calendar.JANUARY,1,0,0);
		Date end = cale.getTime();
		return birthday.compareTo(start)>0&&birthday.compareTo(end)<0;
	}
	public boolean bisBaby() { // 这是第三个方法,仿照的 hashmap 中的 keyset,定义两个临时变量 ,如果变量为空,则初始化,如果不为空,则不要初始化
		return this.birthday.compareTo(start)>0&&birthday.compareTo(end)<0;
	}
	public boolean cisBaby() {
		if(s==null || e ==null)
		{
			Calendar cale = Calendar.getInstance();
			cale.set(1946, Calendar.JANUARY, 1, 0, 0);
			this.s = cale.getTime();
			cale.set(1965,Calendar.JANUARY,1,0,0);
			this.e = cale.getTime();
		}
		return s.compareTo(birthday)>0&&e.compareTo(birthday)<0;
	}
	public static void main(String args[]) {
		
		_2_4 person = new _2_4(Calendar.getInstance().getTime());
		long begin = System.currentTimeMillis();
		for(int i=0;i<1000000;i++) {
			person.bisBaby();
		//	person.isBaby();
			person.cisBaby();
		}
		long end = System.currentTimeMillis();
		System.out.println(((double)end-begin)/1000+" s");//3.359 s  0.016 s
			
	}
	
}

相关文章推荐

Effective C++ 第四条 确定对象被使用前以先被初始化

为内置对象进行手工初始化,C++不保证初始化它们确保每一个构造函数都将对象的每一个成员初始化。 #include using namespace std; #include class Test ...

图片保存在相册中-相同图片(地址)避免重复保存

注:网络加载-相同图片也就是图片的地址相同,所以在此处介绍的是图片地址相同的方法,如果是拍照图片,同理;试着想用对图片解码处理。。这个应该可以扩展 使用方法 ManagerImagesLocal 是...
  • s_s520
  • s_s520
  • 2013年07月05日 19:24
  • 908

iOS 缓存池 对象重复使用

1.缓冲池简单描述 我们知道一个游戏比如跑酷类型的游戏,游戏元素会不断重复。游戏元素会不断从屏幕右边创建出来,当一个元素移出左边屏幕时,又会消失掉。如果不断地new 对象,release 对象 ...

使用ArrayList创建新集合去除集合中自定义对象元素的重复值

上篇《使用ArrayList创建新集合去除集合中元素的重复值》我们说到,使用ArrayList去除集合中的重复值,在本文中,我们创建自定义类,使用ArraayList去除集合自定义对象元素的重复值。 ...
  • qian_ch
  • qian_ch
  • 2017年01月29日 10:35
  • 720

Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)

将各种类型的对象存储到文件中,而不仅仅是字符串、数组和字典类型,有一种更灵活的方法。就是利用NSKeyedAarchiver类创建带键(keyed)的档案来完成。 Mac OS X从版本10.2开始...
  • enuola
  • enuola
  • 2012年07月30日 16:14
  • 16973

oracle-快速删除重复的记录

做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速...

C++[算法]给定一个具有100个元素的数组,请对该数组随机赋值1-100,不能出现重复的值

/*题目:给定一个大小为100的int数组,对其元素进行随机赋值,元素值的范围为1-100,不能出现重复的值。*/ /*解题思路:先用一个vector保存1-100的元素值。每次从中随机取出...

Detecting Near-Duplicates for Web Crawling - simhash与重复信息识别

随着信息爆炸时代的来临,互联网上充斥着着大量的近重复信息,有效地识别它们是一个很有意义的课题。例如,对于搜索引擎的爬虫系统来说,收录重复的网页是毫无意义的,只会造成存储和计算资源的浪费;同时,展示重复...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第四条-避免使用重复的对象
举报原因:
原因补充:

(最多只允许输入30个字)