1. บิตเซ็ตคืออะไร?
หมายเหตุ: เนื้อหาต่อไปนี้มาจาก JDK API:
คลาส Bitset ใช้เวกเตอร์บิตที่เติบโตตามความต้องการ แต่ละองค์ประกอบของบิตเซ็ตมีค่าบูลีน จัดทำดัชนีบิตของบิตเซ็ตด้วยจำนวนเต็มที่ไม่เป็นลบ แต่ละบิตที่จัดทำดัชนีสามารถทดสอบตั้งค่าหรือล้างได้ ผ่านการดำเนินการเชิงตรรกะและตรรกะหรือตรรกะ XOR สามารถใช้บิตเซ็ตหนึ่งบิตเพื่อปรับเปลี่ยนเนื้อหาของบิตเซ็ตอื่น
โดยค่าเริ่มต้นค่าเริ่มต้นของบิตทั้งหมดในชุดเป็นเท็จ
ชุดบิตแต่ละชุดมีขนาดปัจจุบันนั่นคือจำนวนบิตของพื้นที่ปัจจุบันที่ใช้โดยชุดบิต โปรดทราบว่าขนาดนี้เกี่ยวข้องกับการใช้งานบิตเซ็ทดังนั้นจึงอาจเปลี่ยนแปลงได้ตามการใช้งาน ความยาวของชุดบิตนั้นเกี่ยวข้องกับความยาวเชิงตรรกะของชุดบิตและถูกกำหนดให้เป็นอิสระจากการใช้งาน
คลาส Bitset สร้างอาร์เรย์ชนิดพิเศษเพื่อเก็บค่าบิต ขนาดอาร์เรย์ในบิตเซ็ตจะเพิ่มขึ้นตามต้องการ สิ่งนี้คล้ายกับเวกเตอร์บิต (vectorofbits)
นี่คือคลาสดั้งเดิม แต่ได้รับการออกแบบใหม่อย่างสมบูรณ์ใน Java2
Bitset กำหนดสองตัวสร้าง
ตัวสร้างแรกสร้างวัตถุเริ่มต้น:
BitSet()
วิธีที่สองอนุญาตให้ผู้ใช้ระบุขนาดเริ่มต้น บิตทั้งหมดเริ่มต้นเป็น 0
BitSet(intsize)
2. หลักการการใช้งาน Java Bitset
ใน Java การใช้งาน Bitset ตั้งอยู่ในแพ็คเกจ Java.util:
Public Class Bitset ใช้ cloneable, java.io.serializable {ส่วนตัวสุดท้ายคงที่ int address_bits_per_word = 6; ส่วนตัวสุดท้ายคงที่ int int bits_per_word = 1 << address_bits_per_word; 0xFFFFFFFFFFFFFFFFL; ObjectStreamfield สุดท้ายส่วนตัว [] serialPersistentEntents = {New ObjectStreamfield ("BITS", ยาว []. คลาส),};/*** ฟิลด์ภายในที่สอดคล้องกับ SerialField "BITS" */ยาวส่วนตัว [] คำ; ..... }อย่างที่คุณเห็นการใช้งานพื้นฐานของบิตเซ็ทใช้อาร์เรย์ยาวเป็นโครงสร้างการจัดเก็บภายในดังนั้นขนาดของบิตเซ็ตจึงเป็นจำนวนเต็มหลายขนาดของประเภทยาว (64 บิต)
มันมีสองตัวสร้าง:
1. bitset (): สร้างชุดบิตใหม่ขนาดเริ่มต้นคือ 64 บิต
Public Bitset () {Initwords (bits_per_word); SizeIsSticky = false;}2. Bitset (int nbits): สร้างชุดบิตที่มีขนาดเริ่มต้นเพียงพอที่จะแสดงบิตอย่างชัดเจนด้วยช่วงดัชนี 0 ถึง NBITS-1
Public Bitset (int nbits) {// nbits ไม่สามารถเป็นลบได้ ขนาด 0 คือโอเคถ้า (nbits <0) โยน negativearraysizeException ใหม่ ("nbits <0:" + nbits); Initwords (nbits); sizeissticky = true; -บันทึก:
1. หากมีการระบุขนาดการเริ่มต้นของบิตเซ็ทมันจะถูกทำให้เป็นจำนวนเต็มเป็นจำนวนเต็มมากกว่าหรือเท่ากับ 64 ของตัวเลขนี้ ตัวอย่างเช่นสำหรับ 64 บิตขนาดของบิตเซ็ตมีความยาว 1 ในขณะที่ 65 บิตขนาดของบิตเซ็ตมีความยาว 2 นั่นคือ 128 บิต กฎระเบียบนี้ส่วนใหญ่มีไว้สำหรับการจัดตำแหน่งหน่วยความจำในขณะที่หลีกเลี่ยงการพิจารณาว่าไม่จัดการกับสถานการณ์พิเศษและทำให้โปรแกรมง่ายขึ้น
2: วิธีการขนาดของ Bitset: ส่งคืนบิตเซ็ตนี้เพื่อแสดงจำนวนบิตจริงที่ใช้เมื่อค่าบิตเป็นจำนวนเต็มจำนวน 64
วิธีความยาว: ส่งคืน "ขนาดตรรกะ" ของบิตเซ็ตนี้: ดัชนีของบิตชุดสูงสุดในบิตเซ็ตจะถูกเพิ่มโดย 1
3. ใช้สถานการณ์
สถานการณ์แอปพลิเคชันทั่วไปคือการดำเนินงานทางสถิติเกี่ยวกับข้อมูลขนาดใหญ่เช่นการวิเคราะห์บันทึกการนับผู้ใช้ ฯลฯ
ฉันถูกถามคำถามก่อนการสัมภาษณ์การฝึกงานกับอาลีบาบา: มีตัวเลขสุ่ม 10 ล้านตัวและช่วงของตัวเลขสุ่มอยู่ระหว่าง 100 ล้านถึง 100 ล้าน ตอนนี้ฉันต้องเขียนอัลกอริทึมเพื่อค้นหาตัวเลขระหว่าง 100 ล้านถึง 100 ล้านที่ไม่ได้อยู่ในตัวเลขสุ่ม?
ตัวอย่างรหัสมีดังนี้:
คลาสสาธารณะอาลีบาบา {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สุ่มสุ่ม = new Random (); รายการ <teger> list = arrayList ใหม่ <> (); สำหรับ (int i = 0; i <10,00000000; i ++) {interresult = สุ่ม สำหรับ (int i = 0; i <list.size (); i ++) {system.out.println (list.get.get (i));} bitset bitset = bitset ใหม่ (10,000000000); สำหรับ (int i = 0; i <10000000; ตัวเลข "+bitset.size ()); สำหรับ (int i = 0; i <10,000000000; i ++) {ถ้า (! bitset.get (i)) {system.out.println (i);}}}}}}สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ที่หารือเกี่ยวกับสถานการณ์การใช้งานและตัวอย่างรหัสของ Java Bitset และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!