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

原创 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
			
	}
	
}

Java性能优化(4):避免创建重复对象

重复使用同一个对象,而不是每次需要的时候就创建一个功能上等价的新对象,通常前者更为合适。重用方式既快速,也更为流行。如果一个对象时非可变的,那么它总是可以被重用。...
  • pangjiuzala
  • pangjiuzala
  • 2015年08月20日 11:41
  • 2626

List或者arraylist去掉重复数据(对象也可以)

List或者arraylist去掉重复数据(对象也可以)
  • xiaoyi848699
  • xiaoyi848699
  • 2015年02月10日 09:30
  • 2113

避免创建重复的对象

如果一个类是非可变类 那么它总是可以被重用。 作为一个极端的反面例子,考虑下面的语句; string s=new string(“silly”); 该语句每次被执行都创建一个String的实例。但...
  • wq7570875
  • wq7570875
  • 2013年02月26日 14:27
  • 260

c++ 中类重复定义的分析与解决办法

在C++中将类以及类中的成员函数的声明放在.h的头文件中,而将类中成员函数的定义(即实现代码)放在.cpp的源文件中,这样我们的程序设计起来更加的模块化,但是,这样的设计也会带来一些问题,我们分析以下...
  • s12244315
  • s12244315
  • 2016年05月20日 09:13
  • 775

如何在Android中避免创建不必要的对象

转自:http://droidyue.com/blog/2016/08/01/avoid-creating-unnecesssary-objects-in-android/ 在编程开发中,内...
  • bsmmaoshenbo
  • bsmmaoshenbo
  • 2016年09月22日 19:03
  • 465

避免重复编译的两种方法的区别

这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次   #pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用...
  • xuleisdjn
  • xuleisdjn
  • 2016年06月02日 18:00
  • 1062

怎样防止头文件被重复包含?(两种方式)以及它的影响

一、头文件被重复包含 #include文件的一 个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h" #include "x.h" 显然,这里...
  • yx20130919
  • yx20130919
  • 2016年08月06日 10:38
  • 1369

【Java学习笔记】Hashset判断自定义对象是否重复

昨天去面试,考官问了一个关于Java的容器Hashset的问题,是说在加入自定义的对象时,如何设置对象的某一个属性为关键属性,即该属性相同则不能添加,该属性不同则可以添加。用Java编程还是太少,之前...
  • u011613729
  • u011613729
  • 2013年09月13日 11:24
  • 8569

向HashSet插入自定义对象判断是否重复

一.HashSet概述HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 二.存储方式与...
  • Kindle_code
  • Kindle_code
  • 2016年07月11日 15:43
  • 1642

数据库并发插入避免重复数据的问题

今天稍微研究了下这个问题从网上整理资料大致得到了如下方案,先粗略记录下,下班回去再更详细记录下。 所有的方法都先不考虑性能问题,也不考虑业务,只看逻辑上能否达到去重复插入,因为第一,如果唯一性是必须要...
  • baojianhuangbo
  • baojianhuangbo
  • 2015年08月20日 11:16
  • 2748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第四条-避免使用重复的对象
举报原因:
原因补充:

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