一.枚举
枚举是一个比较特殊的类,一般为一组常量。
枚举类用enum关键字定义,其中的常量(一般为大写)由逗号,分割
public enum EnumTest {
MONDAY("星期一", 1),
TUESDAY("星期二", 2),
WEDNESDAY("星期三", 3),
THURSDAY("星期四", 4),
FRIDAY("星期五", 5),
SATURDAY("星期六", 6),
SUNDAY("星期日", 7);
}
且枚举可以声明在内部类中
public class Test{
enum EnumTest {
MONDAY("星期一", 1),
TUESDAY("星期二", 2),
WEDNESDAY("星期三", 3),
THURSDAY("星期四", 4),
FRIDAY("星期五", 5),
SATURDAY("星期六", 6),
SUNDAY("星期日", 7);
}
public static void main(String[] args)
{
EnumTest a = EnumTest.MONDAY;
System.out.Println(A);
}
}
}
每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
以上的枚举类 EnumTest 转化在内部类实现
class EnumTest
{
public static final EnumTest MONDAY = new EnumTest();
public static final EnumTest TUSEDAY = new EnumTest();
public static final EnumTest WEDNESDAY = new EnumTest();
}
迭代枚举的元素(增强for循环)
enum EnumTest {
MONDAY("星期一", 1),
TUESDAY("星期二", 2),
WEDNESDAY("星期三", 3),
THURSDAY("星期四", 4),
FRIDAY("星期五", 5),
SATURDAY("星期六", 6),
SUNDAY("星期日", 7);
}
public class MyClass {
public static void main(String[] args) {
for (EnumTest a : EnumTest.values()) {
System.out.println(a);
}
}
}
编译器生成的Values方法与ValueOf方法
values()方法和valueOf(String name)方法是编译器生成的static方法,因此从前面的分析中,在Enum类中并没出现values()方法,但valueOf()方法还是有出现的,只不过编译器生成的valueOf()方法需传递一个name参数,而Enum自带的静态方法valueOf()则需要传递两个方法,从前面反编译后的代码可以看出,编译器生成的valueOf方法最终还是调用了Enum类的valueOf方法
枚举类中抽象方法的实现,需要枚举类中的每个对象都对其实现
enum Color{
RED{
public String getColor(){//枚举对象实现抽象方法
return "红色";
}
},
GREEN{
public String getColor(){//枚举对象实现抽象方法
return "绿色";
}
},
BLUE{
public String getColor(){//枚举对象实现抽象方法
return "蓝色";
}
};
public abstract String getColor();//定义抽象方法
}
public class Test{
public static void main(String[] args) {
for (Color c:Color.values()){
System.out.print(c.getColor() + "、");
}
}
}
二.Iterator(迭代器)
Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。在 Java 类库中,集合类的基本接口是 Collection 接口。
引入Iterator类
import java.util.Iterator;
Iterator接口包含4个方法:
public interface Iterator<E> {
E next();
boolean hasNext();
void remove();
default void forEachRemaining(Consumer<? super E> action);
}