EnumMap and EnumSet

Collections Built for Enums

EnumSet and EnumMap are very fast (backed by bit vectors and arrays) and keep constants in declaration order.

Example

import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;

public class Main {
    enum Permission { READ, WRITE, DELETE, SHARE, ADMIN }
    enum Status { PLACED, SHIPPED, DELIVERED }

    public static void main(String[] args) {
        Set<Permission> viewer = EnumSet.of(Permission.READ);
        Set<Permission> editor = EnumSet.range(Permission.READ, Permission.DELETE);
        Set<Permission> admin = EnumSet.allOf(Permission.class);
        Set<Permission> notAdmin = EnumSet.complementOf(EnumSet.of(Permission.ADMIN));
        System.out.println("viewer   " + viewer);
        System.out.println("editor   " + editor);
        System.out.println("admin    " + admin);
        System.out.println("notAdmin " + notAdmin);
        System.out.println("editor can share? " + editor.contains(Permission.SHARE));

        Map<Status, Integer> counts = new EnumMap<>(Status.class);
        Status[] orders = { Status.SHIPPED, Status.PLACED, Status.DELIVERED, Status.SHIPPED };
        for (Status s : orders) counts.merge(s, 1, Integer::sum);
        System.out.println("counts   " + counts);
    }
}

Output

viewer   [READ]
editor   [READ, WRITE, DELETE]
admin    [READ, WRITE, DELETE, SHARE, ADMIN]
notAdmin [READ, WRITE, DELETE, SHARE]
editor can share? false
counts   {PLACED=1, SHIPPED=2, DELIVERED=1}