模板模式、清除重复元素

模板模式:

解决某类事情的步骤有些是固定的,有些是会发生变化的,那么这时候我们可以为这类事情提供一个模板代码,从而提高效率

模板模式的步骤:
1.先写出解决该类事情其中的一件的解决方案
2.分析代码,把会发生变化的代码抽取出来独立成一个方法,把该方法描述成一个抽象的方法
3.使用final修饰模板方法,防止别人重写你的模板方法

//需求:编写一个计算程序运行时间的模板
abstract class MyRuntime{
	public final void getTime(){
		long startTime = System.currentTimeMillis();//记录开始的时间
		code();
		long endTime = System.currentTimeMillis();//记录结束时间
		System.out.println("运行时间是:"+(endTime-startTime));
	}
	public abstract void code();
}

public class Demo4 extends MyRuntime{

	public static void main(String[] args) {
		Demo4 d = new Demo4();
		d.getTime();

	}
	//code方法内部就写要计算运行时间的代码
	public void code(){
		for(int i = 0 ;i<100;i++){
			System.out.println("i="+i);
		}
	}

}

清除重复元素:

import java.util.Arrays;

/*
 * 需求:目前有数组int [] arr = {11,2,4,2,10,11};
 * 定义一个函数清除该数组的重复元素,返回的数组存储了那些非重复的元素,而且不准浪费长度
 */
public class Demo5 {
	public static void main(String[] args) {
		int [] arr = {11,2,4,2,10,11};
		arr = clearRepeat(arr);
		System.out.println("清除重复元素的数组:"+Arrays.toString(arr));
	}
	public static int[] clearRepeat(int [] arr){
		//先计算出重复元素的格式:
		int count = 0;//记录重复元素的个数,计数器
		for(int i = 0 ;i<arr.length-1;i++){
			for(int j = i+1;j<arr.length;j++){
				if(arr[i]==arr[j]){
					count++;
					//break是防止重复记录重复元素
					break;
				}
			}
		}
		System.out.println("重复元素的个数:"+count);
		//新数组的长度
		int newLength = arr.length-count;
		//创建一个新数组
		int [] newArr = new int[newLength];
		//新建一个下标用于存储,不然清除重复元素后,不知道该把值赋给新数组中的哪一位,一定放在循环外
		int index = 0;
		//遍历旧数组,将旧数组的值赋给新数组
		for(int i = 0;i<arr.length;i++){
			//新建一个Boolean值用于判断赋给新数组中有没有重复元素.默认为无重复元素
			Boolean flag = false;
			
			//遍历新数组,判断赋给新数组中有没有重复元素
			for(int j = 0;j<newArr.length;j++){
				//如果两数相等,则说明重复了,跳出该循环。
				if(arr[i]==newArr[j]){
					flag = true;
					break;
				}
			}
			if(flag==false){
				newArr[index++]=arr[i];
			}
		}
		return newArr;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值