首先来看LinkHashSet,该集合为HashSet的子类,跟父类一样也是根据元素的hashCode来决定元素在集合中的位置,但该集合以 链表的 形式存储元素,所以集合内元素可以看成是有序的,遍历集合时元素内的存储顺序按照插入的顺序展示,存储性能略微低于父类,因为需要根据链表进行排列.但迭代时会有不错的性能体现
LinkedHashSet newSet = new LinkedHashSet();
newSet.add("元素一");
newSet.add("元素二");
newSet.add("元素三");
newSet.add("元素四");
//使用集合流迭代
newSet.stream().forEach(str -> System.out.println(str));
//删除元素三
newSet.remove("元素三");
//添加元素三
newSet.add("元素三");
System.out.println("---------");
//元素位置与添加时一致
newSet.stream().forEach(str -> System.out.println(str))
EnumSet是专门为枚举类设计的集合,集合中所有元素都必须是指定枚举类型的枚举值,类型在创建集合的时候指定,集合内元素有序排列,该顺序 由枚举类枚举值的定义顺序决定.集合以向量形式存储,占内存很小,运行效率较高,集合内不允许 出现null值
通过下列方法可以创建一个指定的EnumSet集合
- copyOf(Collection c) 创建一个普通集合来创建EnumSet集合
- copyOf(EnumSet s) 创建一个与指定EnumSet具有相同 元素类型相同几何元素的EnumSet集合
- noneOf( Class elementType) 创建一个元素类型为指定枚举类型的空集合
- allOf(Class elementType) 创建一个包含指定枚举类里所有枚举值的集合
- complementOf(EnumSet s) 创建一个 其元素类型与指定EnumSet集合内元素类型相同的集合,新集合为原集合内枚举类所剩下的、不包含在原枚举集合内 的枚举值
//根据指定枚举类创建集合
EnumSet<Weather> weathers = EnumSet.allOf(Weather.class);
System.out.println(weathers);
//创建空集合 集合内元素类型以指定的枚举类枚举值类型相同
EnumSet<Weather> enumSet = EnumSet.noneOf(Weather.class);
System.out.println(enumSet);
//往空集合内添加指定元素
enumSet.add(Weather.下雨);
enumSet.add(Weather.刮风);
System.out.println(enumSet);
//已指定的枚举值创建集合
EnumSet<Weather> enumSet1 = EnumSet.of(Weather.下雪, Weather.晴天);
//创建一个枚举值从枚举类的obj1到枚举类的objN内包含的所有枚举值的集合
System.out.println(EnumSet.range(Weather.晴天,Weather.下雪));