Có lý do cụ thể nào khiến chúng thiếu sót không?Tại sao Java `BitSet` không có các hàm` shiftLeft` và `shiftRight`?
Chúng tồn tại trong BigInteger
, nhưng do mẫu thiết kế không thay đổi của BigInteger
chúng thường rất chậm. BitSet
đẹp hơn nhiều vì có thể thay đổi, nhưng tôi thực sự bỏ lỡ các chức năng shift
(<<
và >>>
cho long
s). Đối với BitSet
, chuyển dịch tại chỗ cũng sẽ hữu ích, cũng như xoay vòng theo chu kỳ.
Tôi đã thấy câu trả lời cho Shifting a Java BitSet (sử dụng get(off, len)
để dịch chuyển; tuy nhiên điều này yêu cầu sao chép).
Đừng làm cho tôi sai. Tôi biết nơi để báo cáo lỗi. Tôi chỉ tự hỏi nếu có một lý do cụ thể là để bỏ qua chúng, ví dụ: một số mẫu thiết kế hoặc một khái niệm như vậy. Cụ thể là chúng là được bao gồm trong BigInteger
.
Vì đó là 'bộ', không phải là 'chuỗi'. – bmargulies
@bmargulies: Một 'long' cũng không phải là một chuỗi. Tuy nhiên, nó có các nhà khai thác dịch chuyển. Và một 'String' thực sự thì không. Và ngữ nghĩa 'get (i, j)' về cơ bản đồng ý với 'chuỗi con', và không có sẵn cho' long' hoặc là ... –
Thuật ngữ 'set' có nghĩa là 'an * bộ sưu tập không theo thứ tự *'. BitSet có công việc biết được quyền hạn nào của 2 được bật, không phải là xáo trộn chúng. – bmargulies