Я рассматривал возможность оптимизации двух моих последних методов хранения данных в Java и хотел бы знать, какой из них действительно наиболее эффективен с точки зрения использования памяти. Ниже приведены описания двух классов. В качестве аргумента предположим, что у них есть одни и те же методы взаимодействия с данными, которые позволяют пользователю получать или устанавливать состояние любого из битов по отдельности или по диапазону с помощью следующих методов:
public boolean getBitState(byte bitIndex)
- Detects and returns the state of the bit at index
bitIndex
- Detects and returns the state of the bit at index
public Clazz setBitState(byte bitIndex, boolean newState)
- Sets the state of the bit at index
bitIndex
tonewState
and returns the resulting object
- Sets the state of the bit at index
public int getStateOfBits(byte startIndex, byte endIndex)
- Detects and returns the state of all bits between
startIndex
andendIndex
as anint
- Detects and returns the state of all bits between
public Clazz setStateOfBits(byte startIndex, byte endIndex, int newState)
- Sets the state of all bits between
startIndex
andendIndex
to the value provided innewState
. - Если
newState
имеет меньше битов, чем подходит, он делается для соответствия, добавляя нули слева - Если
newState
имеет больше битов, чем помещается, лишние биты (с левой стороны) обрезаются
- Sets the state of all bits between
Это классы, которые я сделал для использования этого интерфейса:
IntArray
Этот класс использует int
как способ хранения 32-битных данных с помощью побитовых функций.
Массив32
Этот класс использует массив из 32 boolean
s как способ хранения 32 битов данных посредством стандартных взаимодействий с массивами.