Use of HashMap in conflict risk



  • Hello.

    recently used HashMap In the following way: There is a register consisting of 2 ubiths, the address and the contents of this register from 2 bayth.

    For example, address 0xF1 0x15 (Journal, Senior White) register contains data 0x12 0x45 (Joint, Senior White).

    As the address consists of two byte, can be 256*256 = 65536 registers. With help HashMap Establishing a database of approximately the following types:

              HashMap<String,Data2BytesCell> mDataBase = new HashMap<>();
               mDataBase.put( Byte.toString( (byte) 0xF1 ) + 
                          Byte.toString( (byte) 0x15 ), 
                              new data2BytesCell((byte) 0x12, (byte) 0x45 ); 
    

    The key I'm making is a line of two bikes, here in particular the F115. In the same vein, I also extract the value of the register.

    As a result, 65536 elements were created, but when they started testing these elements at the conflict, they were very large. The register must contain one value at the address, and it is completely different.

    What's the point of using an unreliable vault like HashMap When is the possibility of conflict? Why don't I use it? Or do you use it on purpose?

    Thank you so much for the answers.

    For specification, I will add a more detailed code with methods:

                    // в классе создается объект базы данных
                     HashMap<String,Data2BytesCell> mDataBase = new HashMap<>();
    
              // Описание метода записи данных по адресу.
              //  Данные заносятся в базу по данному адресу
              // (является ключом). 
              public void setData(byte lBAddress, byte hBAddress, byte lBData, byte hBData){
                      mDataBase.put(Byte.toString(lBAddress) + Byte.toString(hBAddress),
                        new Data2BytesCell( lBData, hBData ) );
              }
    
             // Данные считываются с определенного адреса (ключа).
             // Возвращает массив из 2 байт (данные)
              public byte[] getData(byte lBAddress, byte hBAddress){
                   Data2BytesCell data2BytesCell = mDataBase.get( Byte.toString(lBAddress) + Byte.toString(hBAddress) );
    
    
                    return data2BytesCell.getData();
              } 
    

    I will also introduce a conflict test method:

          public void validateCollisions(){
    // Здесь в данные data2BytesCell в 2 байта записываются значение
    // адреса. Т.е. например в регистр с адресом 0х01 0х02 (ключ "0102")
    // записывается значение 0х01 и 0х02.
    // Теперь когда я захочу считать значение по адресу 0х01 0х02
    // (ключ "0102") я должен на выходе получить массив из двух элементов
    // 0х01 0х02. Аналогично заполняется регистры для остальных 256х256
    // адресов.
    for (int i = 0; i < 256; i++){
    for (int j = 0; j < 256; j++){
    Data2BytesCell data2BytesCell = new Data2BytesCell( (byte) i, (byte) j );
    mDataBase.put( Byte.toString( (byte) i ) + Byte.toString( (byte) j ), data2BytesCell);

        }
    }
    
    // Здесь идет проверка берем регистр с адресом 0х01 0х02 
    // (ключ "0102") извлекаем с помощью get извлекаем массив из двух 
    // байт если первый элемент равен 0х01, а второй 0х02, то все норм,
    // если нет, то выводим ошибку коллизия.
    for (int i = 0; i &lt; 256; i++){
        for (int j = 0; j &lt; 256; j++){
            Data2BytesCell data2BytesCell = mDataBase.get(Byte.toString( (byte) i ) + Byte.toString( (byte) j));
            byte lbHb[] = data2BytesCell.getData();
    
            if (lbHb[0] != (byte)i || lbHb[1] != (byte)j ){
                 Log.e(TAG, "Collision in: i = " + Integer.toString(i) + " j = " + Integer.toString(j) + "/n" +
                                "lbHb[0] = " + Byte.toString(lbHb[0]) + "lbHb[1] = " + Byte.toString(lbHb[1]) );
            }
    
    
        }
    }
    



  • The point Hashtable that the temporary complexity of additive, removal, search operations requires O(1) on average. Only 23 cells are likely to have conflict over 50 per cent when entering a chess table. Conflict resolution mechanisms generally exist. I don't know what task you're doing, so I can't tell if you chose the data structure right. I can recommend you read about the data structure.




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2