E ae galera…
Estou com um problema na chave do Map. Eu criei uma classe chamada Bytes, essa ai:
// imports necessarios
public class Bytes implements Comparable {
private byte[] bytes = new byte[2];
public Bytes(byte[] bytes) {
this.bytes = bytes;
}
public byte[] getBytes() {
return bytes;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Bytes)
return Arrays.equals(bytes, ((Bytes)obj).getBytes());
else
return false;
}
@Override
public int hashCode() {
if (bytes[0] > bytes[1])
return bytes[0] * bytes[1];
else
return bytes[0] + bytes[1];
}
@Override
public String toString() {
return bytes[0] + "" + bytes[1];
}
public int compareTo(Object o) {
int soma1 = this.bytes[0] + this.bytes[1];
int soma2 = ((Bytes)o).getBytes()[0] + ((Bytes)o).getBytes()[1];
return (soma1 - soma2);
}
}
Ela é o valor da chave. E o valor associado a essa chave é um Integer.
Eu criei essa classe só para armezenar dois bytes que preciso para um algoritmo de compressão.
O HashMap é assim:
HashMap<Bytes, Integer> twoLetters = new HashMap<Bytes, Integer>();
Eu uso ela da seguinte forma:
public static HashMap<Bytes, Integer> readTwoLettersInFile(String wayFile) {
HashMap<Bytes, Integer> mapTwoLetters = null;
byte[] stream = new byte[2];
int size = 0;
try {
FileInputStream input = new FileInputStream(wayFile);
DataInputStream dataInput = new DataInputStream(input);
mapTwoLetters = new HashMap<Bytes, Integer>();
Bytes letters = null;
while ((size = dataInput.read(stream)) != -1) {
letters = new Bytes(stream);
Integer count = mapTwoLetters.get(letters);
System.out.println("letters: " + letters);
if (count == null)
mapTwoLetters.put(letters, new Integer(1));
else
mapTwoLetters.put(letters, count + 1);
}
dataInput.close();
input.close();
}
catch (FileNotFoundException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
return mapTwoLetters;
}
O método acima está em uma classe.
O arquivo teste é o seguinte:
abracadabra
abra
a
barcabraba
Pode ser colocado no bloco de notas e ser salvo como txt.
O problema é quando imprimo os valores no qual só existe a chave 9897 de um total de 8 e inteiros
diferentes para as chaves.
Não entendi porque as chaves são struturas do tipo Set que não permite chaves duplicadas.
Só que comigo obtive oito chaves iguais.
E ainda não encontrei o problema.
Alguém pode me ajudar?
Vlw… Att…