2013-10-11 44 views
0

抽象類MidiMessage有3個子類:MetaMessage,ShortMessageSysexMessage。 我正在收聽MidiDevice,它會發送短消息或sysexmessages。 問題是MidiMessage的哈希碼永遠不會相同。因此,MidiMessages之間唯一的區別是數據字節數組。檢查HashMap是否包含MidiMessage

我目前的解決方案是將字節存儲在一個字符串,然後檢查是否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?

回答

0

我將使用:

Arrays.hashCode(字節[]一個)