在Java中以键/值样式存储数据的高效或替代方法

时间:2017-11-08 00:33:26

标签: java key-value treemap

我写了一个程序,它接受 String 并给出它的二进制表示(例如字母" a"到01000001)并发出一个频率表示二进制表示的音调。与给定二进制表示匹配时使用的频率依赖于 TreeMap

第二个程序侦听音调,进行一些fft和其他计算以确定它是哪个频率。现在找到相应的频率后,它必须将其转换回二进制(01000001)以格式化为ASCII,从而重新构造字符串。我的问题是,二进制组合及其匹配频率在两个程序使用的 TreeMap 中进行了硬编码。这意味着必须在源文件中写入512对,看起来像

ToneMap() {
        // binary representation and the matching frequency
        frequency.put("00000000", 400);

        frequency.put("00000001", 433);

        frequency.put("00000010", 466);

        frequency.put("00000011", 499);

        frequency.put("00000100", 532);

        frequency.put("00000101", 565);

        frequency.put("00000110", 598);

        frequency.put("00000111", 631);

        frequency.put("00001000", 664);

        frequency.put("00001001", 697);

        frequency.put("00001010", 730);

        frequency.put("00001011", 763);

        // followed by a lot more

这显然是非常错误和低效的。在两个程序上存储/生成字节/频率对的替代方法是什么,而不必依赖于硬编码的TreeMap。

1 个答案:

答案 0 :(得分:0)

在@jontro的帮助下,请参阅评论。

由于已知起始范围和结束范围(400hz和9000hz)。检索到的频率可以与范围一起使用,以找到该频率的索引,从而找到字节表示

     // 33 is difference between adjacent frequencies, 
     // the value of index is 8 which translates to 1000 using
     Integer.toBinaryString( (664-400)/33) 

     //and from the original ToneMap, shows the value obtained from the above code is correct
     frequency.put("00001000", 664);