Tôi đang tìm một cách rất nhỏ gọn để lưu trữ một bitarray độ dài biến dày đặc trong Java. Ngay bây giờ, tôi đang sử dụng BitSet
, nhưng dường như sử dụng trung bình 1.5 * n bit dung lượng lưu trữ cho một bit bit có kích thước n. Thông thường, đây không phải là một vấn đề, nhưng trong trường hợp này bitmap được lưu trữ là một phần khá quan trọng trong bộ nhớ của ứng dụng. Vì vậy, nó sẽ thực sự giúp đỡ để có được chúng được một chút nhỏ hơn.Rất nhỏ gọn Bitarray trong Java
Không gian theo yêu cầu của BitSet có vẻ là do thực tế rằng các mảng thép dài sử dụng để sao cấu trúc dữ liệu có xu hướng tăng gấp đôi mỗi lần nó được mở rộng để tổ chức nhiều bit:
// BitSet's resizing code
private void ensureCapacity(int wordsRequired) {
if (words.length < wordsRequired) {
// Allocate larger of doubled size or required size
int request = Math.max(2 * words.length, wordsRequired);
words = Arrays.copyOf(words, request);
sizeIsSticky = false;
}
}
tôi có thể viết thực hiện thay thế của riêng tôi về BitSet giúp cân bằng cấu trúc dữ liệu phụ trợ một cách thận trọng hơn. Nhưng, tôi thực sự ghét chức năng trùng lặp đã có trong thư viện lớp chuẩn nếu tôi không phải làm như vậy.
tôi muốn có một thời gian khó tưởng tượng này sẽ là trong thư viện chuẩn của Java. Nó không thực sự được thiết kế cho nó. Tôi đặt cược bạn có thể tìm thấy một thư viện của bên thứ ba mặc dù. – Pace
Tôi nghĩ rằng trong trường hợp thực hiện tùy chỉnh của bạn sẽ là một đặt cược tốt hơn. – cx0der