容器类常用方法(5)

EnumSet:  与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。

实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其 HashSet 副本更快。如果其参数也是一个枚举 set ,则批量操作会在固定时间内执行。

1. 基本方法

package cn.yjq.interview;

import java.util.EnumSet;

import org.junit.Test;
import static cn.yjq.interview.AlarmPoint.*;

public class EnumSets {
	
	@Test
	public void test1() {
		EnumSet<AlarmPoint> points = EnumSet.noneOf(AlarmPoint.class);
		points.add(BATHROOM);
		System.out.println("1---: " + points);
		points.addAll(EnumSet.of(STAIR1, STAIR2));
		System.out.println("2---: " + points);
		
		points = EnumSet.allOf(AlarmPoint.class);
		System.out.println("3---: " + points);
		
		points.removeAll(EnumSet.of(STAIR1, STAIR2));
		System.out.println("4---: " + points);

		points.removeAll(EnumSet.range(OFFICE1, OFFICE3));
		System.out.println("5---: " + points);
		
		points = EnumSet.complementOf(points);
		System.out.println("6---: " + points);
		
	}
	
}
2.  应用举例:洗车流程,可扩展Enum类,实现洗车服务的扩展

package cn.yjq.interview;

import java.util.EnumSet;

public class CarWash {
	
	public enum Cycle {
		//底部,轮子,预洗,基本,打蜡,漂洗,吹干
		UNDERBODY {
			@Override
			public void action() {
				System.out.println("洗车子底部");
			}
		}, WHEELWASH {
			@Override
			public void action() {
				System.out.println("洗车轮子");
			}
		}, PREWASH {
			@Override
			public void action() {
				System.out.println("预洗下");
			}
		}, BASIC {
			@Override
			public void action() {
				System.out.println("基本套餐洗法");
			}
		}, HOTWAX {
			@Override
			public void action() {
				System.out.println("车子打蜡");
			}
		}, RINSE {
			@Override
			public void action() {
				System.out.println("车子漂洗");
			}
		}, BLOWDRY {
			@Override
			public void action() {
				System.out.println("车子吹干");
			}
		};
		
		abstract void action();
	}
	
	EnumSet<Cycle> cycles = EnumSet.of(Cycle.BASIC, Cycle.HOTWAX);
	
	public void add(Cycle c) {
		cycles.add(c);
	}
	
	public void washCar() {
		for(Cycle c : cycles) {
			c.action();
		}
	}

	@Override
	public String toString() {
		return cycles.toString();
	}
	
	public static void main(String[] args) {
		CarWash wash = new CarWash();
		System.out.println(wash);
		wash.washCar();
		wash.add(Cycle.BLOWDRY);
		wash.add(Cycle.UNDERBODY);
		wash.add(Cycle.WHEELWASH);
		wash.add(Cycle.RINSE);
		System.out.println(wash);
		wash.washCar();
	}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值