1. 비트 셋은 무엇입니까?
참고 : 다음 내용은 JDK API에서 제공됩니다.
비트 세트 클래스는 주문형으로 자라는 약간의 벡터를 구현합니다. 비트 세트의 각 구성 요소는 부울 값을 갖습니다. 비 음성 정수로 비트 세트의 비트를 색인화하십시오. 각 인덱스 비트는 테스트, 설정 또는 지우실 수 있습니다. 논리적이고 논리적 또는 논리적 XOR 작업을 통해 하나의 비트 세트를 사용하여 다른 비트 세트의 내용을 수정할 수 있습니다.
기본적으로 세트의 모든 비트의 초기 값은 False입니다.
각 비트 세트는 현재 크기, 즉 비트 세트에서 사용되는 현재 공간의 비트 수입니다. 이 크기는 Bitset의 구현과 관련이 있으므로 구현에 따라 변경 될 수 있습니다. 비트 세트의 길이는 비트 세트의 논리 길이와 관련이 있으며 구현과 독립적으로 정의됩니다.
비트셋 클래스는 비트 값을 보유하기 위해 특수 유형의 배열을 만듭니다. Bitset의 배열 크기는 필요에 따라 증가합니다. 이것은 비트 벡터 (vectorofbits)와 유사합니다.
이것은 전통적인 클래스이지만 Java2에서 완전히 재 설계되었습니다.
Bitset은 두 생성자를 정의합니다.
첫 번째 생성자는 기본 객체를 만듭니다.
BitSet()
두 번째 방법을 사용하면 사용자가 초기 크기를 지정할 수 있습니다. 모든 비트는 0으로 초기화됩니다.
BitSet(intsize)
2. Java Bitset 구현 원리
Java에서는 Bitset의 구현은 java.util 패키지에 있습니다.
공개 클래스 비트 세트는 클로닝 가능, java.io.serializable {개인 최종 정적 int jesdres_bits_per_word = 6; 비공개 최종 정적 int bits_per_word = 1 << address_bits_per_word; 개인 최종 정적 int _index_mask = bits_per_word -1;/ * part letom letmast에 사용되거나 오른쪽으로 사용됩니다. 0xfffffffffffffffffl; private static final objectStreamfield [] serialPersistentFields = {new ObjectStreamfield ( "비트", long []. class),/*** SerialField "비트"에 해당하는 내부 필드. */private long [] 단어; .....}보시다시피, Bitset의 기본 구현은 긴 배열을 내부 저장 구조로 사용하므로 Bitset의 크기는 긴 유형 (64 비트) 크기의 정수 다중입니다.
두 개의 생성자가 있습니다.
1. bitset () : 새 비트 세트를 만들고 기본 크기는 64 비트입니다.
public bitset () {initwords (bits_per_word); sizeiscity = false;}2. 비트 셋 (int nbits) : 초기 크기가 0에서 nbits-1의 인덱스 범위를 가진 비트를 명시 적으로 표현하기에 충분한 비트 세트를 만듭니다.
public bitset (int nbits) {// nbits는 부정적 일 수 없습니다. 크기 0은 (nbits <0) 새로운 Negativearraysizeexception을 던지면 괜찮습니다 ( "nbits <0 :" + nbits); initwords (nbits); sizeiscity = true; }메모:
1. 비트 세트의 초기화 크기가 지정되면이 숫자의 64보다 큰 정수로 정규화됩니다. 예를 들어, 64 비트의 경우 비트 세트의 크기는 1이고 65 비트의 경우 비트 세트의 크기는 128 비트입니다. 이 규정은 주로 메모리 정렬을위한 것이며, 특별한 상황을 다루지 않고 프로그램을 단순화한다는 고려를 피합니다.
2 : Bitset의 크기 방법 : 비트 값이 64의 정수 다중 일 때 사용되는 실제 비트 수를 나타 내기 위해이 비트 세트를 반환합니다.
길이 방법 :이 비트의 "논리적 크기"를 반환합니다.
3. 시나리오를 사용하십시오
일반적인 응용 프로그램 시나리오는 로그 분석, 사용자 계수 등과 같은 대규모 데이터에 대한 일부 통계 작업을 수행하는 것입니다.
나는 인턴쉽 인터뷰 전에 알리바바와의 질문을 받았다. 이제 나는 임의의 숫자가 아닌 1 억에서 1 억 사이의 숫자를 찾기 위해 알고리즘을 작성해야합니까?
코드 예제는 다음과 같습니다.
public class alibaba {public static void main (string [] args) {random random = new random (); list <integer> list = new arraylist <> (); for (int i = 0; i <10000000; i ++) {int randomResult = random.nextint (1000000000); list.add (randomResult); for (int i = 0; i <list.size (); i ++) {system.out.println (list.get (i));} bitset bitset = new bitset (1000000000); for (int i = 0; i <00000000; i ++) {bitset.set (list.get.get); "0 Monight on that on that on that on that on that on that on that on that on on that on at that on on that on on that on at that ondrincial. 숫자 "+bitset.size ()); for (int i = 0; i <1000000000; i ++) {if (! bitset.get (i)) {system.out.println (i);}}}}요약
위의 내용은 Java Bitset의 사용 시나리오 및 코드 예제에 대해이 기사에 관한 것이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!