คิวลำดับสองทิศทาง ArrayDeque และ LinkedList โซ่แบบสองทิศทาง, JDK ได้รับการรวมไว้ที่นี่ ArrayDeque รวมถึงสแต็กลำดับและคิวลำดับในขณะที่ LinkedList มีห่วงโซ่สแต็กและคิวโซ่ ทั้ง ArrayDeque และ LinkedList เป็นความปลอดภัยของเธรด ลำดับความสำคัญของคิวลำดับความสำคัญยังอยู่ใน JDK
1. การใช้คิวตามลำดับ
Package lang; นำเข้า java.io.serializable; นำเข้า java.util.arrays;/** * @classname: arrayqueue * @description: คิวลำดับ * @date 20 มกราคม 2014 เวลา 3:46:19 PM * @param <t> * serialversionuid สุดท้ายยาว = 73333444126529379197L; ส่วนตัว int default_size = 10; ความจุ int ส่วนตัว; // บันทึกความยาวของอาร์เรย์วัตถุส่วนตัว [] elementData; // กำหนดอาร์เรย์เพื่อบันทึกองค์ประกอบของคิวต่อคิวส่วนตัวด้านหน้า int front = 0; // Fleet Head Private Int ด้านหลัง = 0; // ทีมเทอร์มินัล // สร้างคิวที่ว่างเปล่า elementData = วัตถุใหม่ [ความจุ]; } // สร้างคิวสาธารณะแบบต่อเนื่องอาร์เรย์คิว (องค์ประกอบ t) {this (); ElementData [0] = องค์ประกอบ; ด้านหลัง ++; } arrayqueue สาธารณะ (int initsize) {elementData = วัตถุใหม่ [initsize]; } / *** สร้างคิวคำสั่งซื้อด้วยอาร์เรย์ของความยาวที่ระบุ* @param องค์ประกอบระบุองค์ประกอบแรกในคิวคำสั่ง* @param @param ระบุความยาวของอาร์เรย์พื้นฐานของคิวคำสั่ง* / อาเรย์คิวสาธารณะ elementData = วัตถุใหม่ [ความจุ]; ElementData [0] = องค์ประกอบ; ด้านหลัง ++; } / ** * @title: ขนาด * @description: รับขนาดของคิวลำดับ * @return * / ขนาด int สาธารณะ () {กลับด้านหลัง - ด้านหน้า; } / ** * @title: ข้อเสนอ * @description: enqueue * @param Element * / ข้อเสนอโมฆะสาธารณะ (องค์ประกอบ t) {ensurecapacity (ด้านหลัง + 1); ElementData [ด้านหลัง ++] = องค์ประกอบ; } โมฆะส่วนตัว ensureCapacity (int mincapacity) {// ถ้าความยาวดั้งเดิมของอาร์เรย์น้อยกว่าความยาวที่ต้องการในปัจจุบัน int oldcapacity = elementData.length; if (mincapacity> oldcapacity) {int newCapacity = (oldCapacity * 3) / 2 + 1; if (newCapacity <mincapacity) newCapacity = mincapacity; // mincapacity มักจะใกล้เคียงกับขนาดดังนั้นนี่คือการชนะ: elementData = arrays.copyof (ElementData, newCapacity); }} / ** * @title: โพล * @description: dequeue * @return * / public t poll () {ถ้า (isempty ()) {โยน indexoutofboundsexception ใหม่ ("ข้อยกเว้นคิวว่างเปล่า"); } // รักษาค่าขององค์ประกอบที่ปลายด้านหน้าของคิว t oldValue = (t) elementData [ด้านหน้า]; // ปล่อยองค์ประกอบที่ปลายด้านหน้าของคิว ElementData [ด้านหน้า ++] = null; กลับ OldValue; } / ** * @title: peek * @description: ส่งคืนองค์ประกอบด้านบนของคิว แต่ไม่ลบองค์ประกอบด้านบนของคิว * @return * / สาธารณะ t peek () {ถ้า (isempty ()) {โยน indexoutofboundsexception ใหม่ ( } return (t) elementData [ด้านหน้า]; } / ** * @title: isempty * @description: ตรวจสอบว่าคิวคำสั่งซื้อเป็นคิวที่ว่างเปล่า * @return * / บูลีนสาธารณะ isempty () {return hear == ด้านหน้า; } / *** @title: ล้าง* @description: ล้างคิวคำสั่งซื้อ* / โมฆะสาธารณะ Clear () {// กำหนดองค์ประกอบทั้งหมดของอาร์เรย์พื้นฐานไปยังอาร์เรย์ null.fill (ElementData, Null); ด้านหน้า = 0; ด้านหลัง = 0; } สตริงสาธารณะ toString () {ถ้า (isEmpty ()) {return "[]"; } else {StringBuilder sb = new StringBuilder ("["); สำหรับ (int i = front; i <rear; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); ส่งคืน sb.delete (len - 2, len) .append ("]"). toString (); -2. การใช้คิวโซ่
Package lang; นำเข้า Java.io.serializable;/** * @classname: linkqueue * @description: chain queue * @date 21 มกราคม 2014 เวลา 3:24:38 PM * @param <t> */ชั้นเรียนสาธารณะ -6726728595616312615L; // กำหนดโหนดคลาสภายในและอินสแตนซ์โหนดแสดงถึงโหนดของคิวโซ่ โหนดคลาสส่วนตัว {ข้อมูลส่วนตัว t; // บันทึกข้อมูลของโหนดโหนดส่วนตัวถัดไป; // อ้างอิงไปยังโหนดถัดไป // ตัวสร้างโดยไม่มีพารามิเตอร์โหนดสาธารณะ () {} // ตัวสร้างสำหรับการเริ่มต้นแอตทริบิวต์ทั้งหมดโหนดสาธารณะ (ข้อมูล t, โหนดถัดไป) {this.data = data; this.next = ถัดไป; }} หน้าโหนดส่วนตัว; // บันทึกโหนดหัวของคิวโซ่คิวโหนดส่วนตัวด้านหลัง; // บันทึกโหนดหางของโซ่คิวส่วนตัวขนาด int int; // บันทึกจำนวนโหนดที่รวมอยู่ในคิวโซ่/** * <p> ชื่อ: linkqueue </p> * <p> ด้านหน้า = null; ด้านหลัง = null; }/** * <p> ชื่อเรื่อง: linkqueue </p> * <p> คำอธิบาย: สร้างคิวโซ่โดยการระบุองค์ประกอบข้อมูลซึ่งมีเพียงองค์ประกอบเดียวในคิวโซ่ </p> */public linkqueue (องค์ประกอบ t) {front = โหนดใหม่ (องค์ประกอบ, null); // เพียงหนึ่งโหนดด้านหน้าและด้านหลังไปที่ด้านหลังโหนด = ด้านหน้า; ขนาด ++; } / ** * @title: ขนาด * @description: รับขนาดของคิวลำดับ * @return * / ขนาด int สาธารณะ () {ขนาดคืน; } /** * @title: ข้อเสนอ * @description: enqueue * @param องค์ประกอบ * /ข้อเสนอโมฆะสาธารณะ (องค์ประกอบ t) {// ถ้าคิวโซ่ยังคงเป็นคิวโซ่ว่างถ้า (front == null) {front = โหนดใหม่ (องค์ประกอบ, null); ด้านหลัง = ด้านหน้า; // มีเพียงหนึ่งโหนดด้านหน้าและด้านหลังไปยังโหนด} else {node newNode = โหนดใหม่ (องค์ประกอบ, null); // สร้าง node.next = newNode; // ให้จุดต่อไป } / ** * @title: โพล * @description: dequeue * @return * / สาธารณะ t poll () {node oldfront = ด้านหน้า; front = front.next; oldfront.next = null; ขนาด--; กลับ oldfront.data; } / ** * @title: peek * @description: ส่งคืนองค์ประกอบด้านบนของคิว แต่ไม่ลบองค์ประกอบด้านบนของคิว * @return * / สาธารณะ t peek () {return rear.data; } / ** * @title: isempty * @description: ตรวจสอบว่าคิวคำสั่งซื้อเป็นคิวเปล่า * @return * / บูลีนสาธารณะ isempty () {ขนาดคืน == 0; } / *** @title: ล้าง* @description: ล้างคิวคำสั่งซื้อ* / โมฆะสาธารณะ Clear () {// กำหนดโหนดด้านหน้าและด้านหลังเป็น null front = null; ด้านหลัง = null; ขนาด = 0; } public String toString () {// เมื่อคิวโซ่เป็นคิวโซ่ว่างถ้า (isempty ()) {return "[]"; } else {StringBuilder sb = new StringBuilder ("["); สำหรับ (โหนด current = front; current! = null; current = current.next) {sb.append (current.data.toString () + ","); } int len = sb.length (); ส่งคืน sb.delete (len - 2, len) .append ("]"). toString (); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {linkqueue <string> queue = ใหม่ linkqueue <string> ("aaaa"); // เพิ่มสององค์ประกอบ queue.offer ("bbbb"); queue.offer ("cccc"); System.out.println (คิว); // croute queue.poll () หลังจากลบองค์ประกอบ; System.out.println ("ลบคิวหลังจากองค์ประกอบ:" + คิว); // เพิ่มองค์ประกอบอีกครั้ง queue.offer ("dddd"); System.out.println ("เพิ่มคิวหลังจากองค์ประกอบอีกครั้ง:" + คิว); // เพิ่มองค์ประกอบอีกครั้ง queue.poll (); // เพิ่มองค์ประกอบอีกครั้ง queue.offer ("eeee"); System.out.println (คิว); -3. การใช้คิวแบบวงกลม
Package lang; นำเข้า java.io.serializable; นำเข้า java.util.arrays;/** * @classname: loopqueue * @description: loopqueue * @date 20 มกราคม 2014 เวลา 3:47:14 PM */ชั้นเรียนสาธารณะ = -3670496550272478781L; ส่วนตัว int default_size = 10; ความจุ int ส่วนตัว; // บันทึกความยาวของอาร์เรย์วัตถุส่วนตัว [] elementData; // กำหนดอาร์เรย์เพื่อบันทึกองค์ประกอบของคิวลูปหน้าส่วนตัวด้านหน้า = 0; // กองเรือรบส่วนตัว int ส่วนตัว = 0; // ทีมเทอร์มินัล // สร้างคิวลูปว่างเปล่า elementData = วัตถุใหม่ [ความจุ]; } // สร้างคิวลูปด้วยองค์ประกอบการเริ่มต้น loopqueue สาธารณะ (องค์ประกอบ t) {this (); ElementData [0] = องค์ประกอบ; ด้านหลัง ++; } / *** สร้างคิวลูปที่มีอาร์เรย์ที่มีความยาวที่ระบุ* @param องค์ประกอบระบุองค์ประกอบแรกในคิวลูป* @param @param ระบุความยาวของอาร์เรย์พื้นฐานของคิวลูป* / loopqueue สาธารณะ elementData = วัตถุใหม่ [ความจุ]; ElementData [0] = องค์ประกอบ; ด้านหลัง ++; } // รับขนาดของลูปคิวสาธารณะขนาด int () {ถ้า (isempty ()) {return 0; } กลับด้านหลัง> ด้านหน้า? ด้านหลัง - ด้านหน้า: ความจุ - (ด้านหน้า - ด้านหลัง); } // แทรกโมฆะสาธารณะคิวเพิ่ม (องค์ประกอบ t) {ถ้า (ด้านหลัง == front && elementData [front]! = null) {โยน indexoutofboundsexception ใหม่ ("ข้อยกเว้นที่มีคิวเต็ม"); } ElementData [ด้านหลัง ++] = องค์ประกอบ; // ถ้าด้านหลังมาถึงจุดสิ้นสุดให้หันหัวกลับ = ด้านหลัง == ความจุ? 0: ด้านหลัง; } // ลบคิวสาธารณะ t ลบ () {ถ้า (isempty ()) {โยน indexoutofboundsexception ใหม่ ("ข้อยกเว้นคิวว่างเปล่า"); } // รักษาค่าขององค์ประกอบที่ปลายด้านหลังของคิว t oldValue = (t) elementData [ด้านหน้า]; // ปล่อยองค์ประกอบที่ปลายด้านหลังของคิว ElementData [ด้านหน้า ++] = null; // ถ้าด้านหน้ามาถึงจุดสิ้นสุดแล้วหันด้านหน้า = front == ความจุ? 0: ด้านหน้า; กลับ OldValue; } // ส่งคืนองค์ประกอบด้านบนของคิว แต่อย่าลบองค์ประกอบด้านบนขององค์ประกอบ queue สาธารณะ t () {ถ้า (isempty ()) {โยน indexoutofboundsexception ใหม่ ("ข้อยกเว้นคิวว่างเปล่า"); } return (t) elementData [ด้านหน้า]; } // ตรวจสอบว่าคิวลูปเป็นบูลีนสาธารณะคิวเปล่า isempty () {// ด้านหลัง == ด้านหน้าและองค์ประกอบที่ด้านหลังเป็นค่าคืนด้านหลัง == ด้านหน้า && elementData [ด้านหลัง] == null; } // ล้างโมฆะสาธารณะลูปคิวสาธารณะ Clear () {// กำหนดองค์ประกอบทั้งหมดของอาร์เรย์พื้นฐานเป็นอาร์เรย์ null.fill (ElementData, null); ด้านหน้า = 0; ด้านหลัง = 0; } สตริงสาธารณะ toString () {ถ้า (isEmpty ()) {return "[]"; } else {// ถ้าด้านหน้า <ด้านหลังองค์ประกอบที่ถูกต้องคือองค์ประกอบระหว่างด้านหน้าและด้านหลังถ้า (ด้านหน้า <ด้านหลัง) {StringBuilder SB = StringBuilder ใหม่ ("["); สำหรับ (int i = front; i <rear; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); ส่งคืน sb.delete (len - 2, len) .append ("]"). toString (); } // ถ้าด้านหน้า> = ด้านหลังองค์ประกอบที่ถูกต้องอยู่ระหว่างความจุด้านหน้า-> และ 0-> ด้านหน้า {StringBuilder SB = สตริงใหม่ ("["); สำหรับ (int i = front; i <ความจุ; i ++) {sb.append (elementData [i] .toString ()+","); } สำหรับ (int i = 0; i <rear; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); ส่งคืน sb.delete (len - 2, len) .append ("]"). toString (); }}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {loopqueue <String> queue = new loopqueue <String> ("AAAA", 3); // เพิ่มสององค์ประกอบ queue.add ("bbbb"); queue.add ("CCCC"); // ในเวลานี้คิวเป็นระบบเต็มรูปแบบ. println (คิว); // หลังจากลบองค์ประกอบคิวสามารถเพิ่มคิวองค์ประกอบอื่น remove (); System.out.println ("คิวหลังจากลบองค์ประกอบ:" + คิว); // เพิ่มองค์ประกอบอีกครั้งและคิวเต็มอีกครั้ง queue.add ("dddd"); System.out.println (คิว); System.out.println (คิว); System.out.println (คิว); // หลังจากลบองค์ประกอบคิวสามารถเพิ่มคิวองค์ประกอบอื่น remove (); // เพิ่มองค์ประกอบอีกครั้งและคิวเต็มอีกครั้ง queue.add ("eeee"); System.out.println (คิว); -วิธีการใช้งานคิว Java ข้างต้น (คิวตามลำดับ, คิวโซ่, คิวลูป) เป็นเนื้อหาทั้งหมดที่ฉันได้แชร์กับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น