检查HashMap是否包含MidiMessage

时间:2013-10-11 00:42:24

标签: java hashmap javax.sound.midi

抽象类MidiMessage有3个子类:MetaMessage,ShortMessageSysexMessage。 我正在听MidiDevice,它发送短消息或sysexmessages。 问题是MidiMessage的哈希码永远不会相同。因此,MidiMessages之间的唯一区别是数据字节数组。

我目前的解决方案是将字节存储在字符串中,然后检查hashmap是否包含字符串:

public class Test{
    private String inputKey="";
    private byte[] data;
    private int isShortMessage;

    //...

    private void setInputKey(MidiMessage msg){
        inputKey="";
        data=msg.getMessage();
        if(msg instanceof ShortMessage){
            inputKey+= ((ShortMessage) msg).getChannel();   
            //last byte contains the value. Value isn't needed. 
            isShortMessage=1;
        }
        else isShortMessage=0;
        for(int i=0; i<msg.getLength()-isShortMessage;i++){
            inputKey+= data[i]; 
        }
   }
} 

但是我不喜欢它,因为转换的开销(可以摆脱它,如果我总是切断最后一个字节;这应该几乎总是......)和字符串转换。 那么,有没有更好的方法来检查hashmap或集合是否包含midimessage?

1 个答案:

答案 0 :(得分:0)

我会用:

Arrays.hashCode(byte [] a)