Se acesso a memória não fosse tão lento, eu inverteria a sua tabela, já que você só quer checar um byte. Algo como:
// private static final byte[] values = { 'a', 'x', 'd', 'y' };
private static final boolean[] invValues = { /*0*/false, /*1*/false, .... ,
/*'a'*/true, /*'b'*/false, ... /*'x'*/true, .... };
public static boolean hasValue(byte value) {
return invValues [value & 0xFF];
}
(Bom, como a tal tabela de valores invertidas ocupa 256 posições - não sei se 256 bytes ou 1 KByte), então até seria possível que ela ficasse em cache, depois de algumas vezes que essa rotina hasValue fosse acessada.
Se tiver paciência, pode-se usar um “java.util.BitSet”, que faz com que a tal tabela de valores invertidos ocupe apenas 256 bits. Não sei se isso é mais rápido; só testando.
import java.util.BitSet;
class TesteBitSet {
static BitSet bs;
static {
bs = new BitSet(256);
bs.set ('a');
bs.set ('x');
bs.set ('d');
bs.set ('y');
}
public static boolean hasValue(byte value) {
return bs.get (value & 0xFF);
}
public static void main(String[] args) {
System.out.println (hasValue ((byte)'a'));
System.out.println (hasValue ((byte)'b'));
}
}